Вопросы по дизайну приложения ASP.NET 2.0 - PullRequest
2 голосов
/ 06 августа 2011

Как начинающий программист на C #, мои проблемы с отладкой охватывают самые основные элементы C # Program Design. Мой проект - это компьютерная торговая система на основе Интернета. Работая с (2) API, 1 для ценообразования и другим для заказов, моя проблема, кажется, связана с дизайном кода и проблемами, связанными с несколькими сеансами.

Я пытаюсь использовать делегатов для всех событий.

Мои текущие вопросы относительно Windows Forms и Object

  1. Является ли это правильным (или «правильным») способом создания объектов класса и делегатов событий с использованием страниц aspx? (я понимаю, что мои примеры часто путают больше, чем помогают).

    public partial class admin_Admin : System.Web.UI.Page
    {
    
     private static Downloader dl = null;
     private SendOrderDelegate sendError;
    
     protected void Page_Load(object sender, EventArgs e)
     {
          if (!Page.IsPostBack)
          {
               if (dl == null)
               {
                    Main();
               }
          }
     }
    
     protected static void Main()
     {
          dl = new Downloader();
          sendOrder = new Steury.Trading.SendOrderDelegate(dl.Order);
      }
    }
    
  2. Когда и как использовать метод Main ()? Каково определение использования Main () в сложном веб-приложении с несколькими программами (Ценообразование, Заказы, BackTesting, Оптимизация), которые работают одновременно и используют разные страницы aspx ??

Должен ли я использовать Main () выше для каждой страницы aspx, и снова для каждой основной программы Class ... Orders.cs, OrderShort.cs, BacktTest.cs, BackTestShort.cs, Optimize.cs, OptimizeShort.cs или использовать Main Only для двух страниц aspx, которые входят в систему серверов ценообразования и заказов, а затем поддерживают статические переменные сеанса, которые подключаются к соответствующим классам?

Как вы можете сказать, я борюсь с этими концепциями и не нашел ресурса, который подробно описывается для очень сложных сценариев. Большинство, если не все, используют очень простые примеры классов. Я нашел это полезным Core C # и .NET http://flylib.com/books/en/4.253.1.1/1/.

  1. Есть ли хороший совет о том, когда использовать статическое ключевое слово? Должен ли я использовать его только для страниц верхнего уровня? На данный момент я не развертываю многопользовательский проект.

Были бы полезны любые другие предложения, включая конструктивную критику.

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Вы пытаетесь адаптировать методы форм Windows к веб-страницам. Это не сработает. В частности, ваша основная функция здесь не только бессмысленна, но и активно вредна. Делая Main статической, это означает, что она не может получить доступ к каким-либо экземплярам данных элемента или свойствам страницы, если они тоже не являются статическими.

Почему вы даже хотите пометить это как статическое? Что ты думаешь? Потому что это статично в приложениях форм Windows?

Вы обычно используете статические методы только тогда, когда эти методы не выполняют никаких функций изменения состояния. Хороший способ получить представление о том, как обычно используются статические методы, - это просмотреть документацию по распространенным классам .NET, таким как string, и посмотреть, какие функции они определяют как статические.

Что нужно помнить о веб-страницах, так это то, что они основаны на спросе и не имеют состояния. В Windows Forms или консольных приложениях вы «запускаете» программу, и она продолжает работать, пока вы не выйдете. Веб-приложения существуют только в контексте одного запроса, хотя сеансы обеспечивают некоторую непрерывность между запросами.

Итак, суть в том, что каждый сеанс - это его собственная вселенная. Он начинается, останавливается и заканчивается каждый раз, когда запрашивается страница. У вас есть только данные сеанса, чтобы связать отдельные запросы.

Что касается многопользовательского ... все веб-приложения являются многопользовательскими. Это то, что веб-среда разработана вокруг. Два или более человека могут одновременно получать доступ к веб-страницам, и вы никак не можете это остановить.

2 голосов
/ 06 августа 2011

Когда и как использовать метод Main ()?

Вы нет.Убери это.Основная функциональность (код, который вы хотите запустить при первом запуске всего вашего веб-сайта, например, приложения) или когда определенный пользователь обращается к нему в первый раз, например, сеанс, перемещается в global.asax.По умолчанию этот файл не в вашем проекте веб-приложения, но вы можете добавить его.

Это правильный (или «правильный») способ создания экземпляра классаобъекты и делегаты событий

Нет, это не так.Хотя проверка IsPostBack является хорошей (это означает, была ли страница опубликована пользователем, т. Е. Нажал ли он кнопку отправки на вашей странице, которая отправляет обратно на ту же страницу).Здесь не то, что главная статическая функция.Рассмотрим каждую страницу как класс (на самом деле это класс), и что система создает для него этот экземпляр.Место для посвящения Page_Init.Но многие люди делают это просто и помещают это в Page_Load.Эти специальные методы автоматически вызываются системой ASP.NET при загрузке страницы.

Есть ли полезные советы о том, когда использовать статическое ключевое слово?

Это не так просто ответить.В целом, на веб-странице вы почти никогда не используете статическое ключевое слово просто потому, что многие люди и пользователь одновременно получают доступ к вашим страницам.Однако служебные классы и методы иногда могут быть статическими.Это совершенно другая среда, чем обычные приложения Windows, которые обычно работают в защищенной среде.

и не нашли ресурса, который подробно описан для очень сложных сценариев

На ASP.NET много хороших книг.Некоторые идут в очень сложные сценарии.Но, учитывая текущую фазу, в которой вы находитесь, я бы посоветовал вам начать с простых сценариев.

...