Это хорошая идея, чтобы избежать методов управления состоянием в ASP.Net MVC? - PullRequest
2 голосов
/ 12 октября 2011

Является ли хорошей идеей избегать методов управления состоянием (сеанс, файлы cookie и т. Д.) В ASP.Net MVC 3.0?

Если да, то есть ли другие альтернативы, кроме TempData?

Ответы [ 5 ]

1 голос
/ 12 октября 2011

Это зависит.

Сессия и файлы cookie были изобретены для решения какой-то проблемы, поэтому их следует использовать для решения этой проблемы.

TempData не сильно поможет в замене файлов cookie, поскольку файлы cookie сохраняются на стороне клиента.Также TempData является Session, различие в том, что TempData предназначена только для перенаправления.Поскольку TempData весьма полезна в сценариях перенаправления, вы можете оставить сеанс включенным для этих сценариев.

Если у вас нет сессионно-ориентированных сценариев (например, создание объекта состоит из нескольких шагов, а после первого шага вы еще не можете сохранить его в базе данных), вы можете избежать его использования, но в целом это несамо зло.

1 голос
/ 12 октября 2011

Это будет зависеть от ваших конкретных требований.Состояние сеанса и куки, например, очень разные звери.

Если состояние сеанса соответствует вашим требованиям в WebForms, то это хорошо подходит для MVC.Нет особой причины не использовать его в MVC.

В основном у вас есть только 3 места, где вы можете хранить данные на клиенте (куки / скрытые значения / строка запроса), на сервере (сеанс / кэш /static), в базе данных.

Имеется множество документации о плюсах и минусах всех этих методов, хорошее начальное место:

http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

0 голосов
/ 12 октября 2011

Я считаю, что состояние хорошо поддерживается в кэше при реализации шаблона хранилища.В проекте MVC Futures также есть метод Html.Serialize, который предоставляет хранилище состояний «как состояние просмотра».http://mvccontrib.codeplex.com/

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

Сессия все еще используется - если нужно - она ​​имеет свое место.Сеанс окружает множество «плохих», но если вам нужно хранить информацию, относящуюся к сеансу, а ваш сайт не связан с большим количеством посещений в день, то вы, вероятно, можете принять удар очень хорошо.* TempData отлично подходит для хранения сообщений о состоянии, которые будут отображаться при следующем запросе, например «запись успешно сохранена», поэтому вы не потеряете ее при перенаправлении и не будете передавать ее в строку запроса.Это единственное, для чего я его использую, хотя некоторые используют его для хранения данных для повторного связывания при следующем запросе.

0 голосов
/ 12 октября 2011

IMO, правила для состояния сеанса в MVC такие же, как правила в WebForms: используйте его, если необходимо, но сохраняйте легкость использования.Если у вас действительно есть данные для отслеживания по каждому пользователю / сеансу, нет необходимости заново изобретать колесо.

0 голосов
/ 12 октября 2011

Вы можете сохранить свое состояние в базе данных напрямую

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