Какие конструкции / шаблоны вы используете для доступа к состоянию? - PullRequest
1 голос
/ 04 февраля 2010

Допустим, вы создаете что-то простое, например форму ввода данных / CRUD для работы с объектом под названием Customer. Возможно, вы передаете CustomerID через состояние сеанса.

Я склонен писать много стандартного кода для обработки этой переменной Session определенным образом. Цели немного различаются, но, как правило, такие вещи, как:

  • Избегайте загромождения основного потока страницы с помощью кода
  • Умно обрабатывать кнопку возврата
  • Удалите переменную из сеанса и сохраните ее в ViewState ASAP
  • Код защиты для ситуаций сбоя, когда состояние не передается или теряется

У вас есть лучшая практика для решения этой ситуации? Есть ли в вашем стеке классы, которые каждый раз справляются с этим? Вы просто вызываете переменные Session напрямую? Используете ли вы зашифрованный QueryString и полностью избегаете переменных Session в этой ситуации, чтобы сделать кнопку возврата немного лучше?

В последнее время я использую свойства с переменными сеанса. Вот простой пример, который я только что скомбинировал, хотя имейте в виду, что этот пример не слишком терпим к кнопке «Назад»:

Private ReadOnly Property CustomerID() As Integer
    Get
        If Me.ViewState(Constants.CustomerID) Is Nothing Then
            If Me.Session(Constants.CustomerID) Is Nothing Then
                Throw New ApplicationException("CustomerID was not persisted.")
            Else
                Me.ViewState(Constants.CustomerID) = Me.Session(Constants.CustomerID)
                Me.Session.Remove(Constants.CustomerID)
            End If
        End If

        Return Me.ViewState(Constants.CustomerID)
    End Get
End Property

Итак, как ваш магазин справляется с этим? Спасибо!

1 Ответ

1 голос
/ 04 февраля 2010

Команды, над которыми я работал, не передают такого рода информацию о рабочих процессах во время сеанса, в основном из-за сложности, которую она представляет для веб-ферм / садов. Мы рассматриваем сессию как контейнер для информации, которая имеет отношение к большей части (если не ко всем) времени с момента, когда пользователь впервые заходит на сайт, до момента его ухода. Даже тогда я бы использовал сессию только в том случае, если эту информацию было бы очень дорого извлекать / создавать, и только если бы я знал, что балансировщик нагрузки привязывает пользователя к определенному серверу в ферме или что у нас есть подходящий вне поставщик сеанса процесса на месте.

Вместо этого я бы передавал этот тип информации через строку запроса, скрытое поле ввода или ViewState (если включено) и обеспечивал бы дружественную обработку ошибок при отправке недопустимых значений. Если важно управление историей, я бы использовал Управление историей ASP.NET AJAX .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...