Состояние сеанса корзины покупок выполнено правильно в ASP.NET MVC - PullRequest
9 голосов
/ 22 ноября 2010

Я внедряю простую сессионную корзину для неаутентифицированных пользователей в ASP.NET MVC и хочу сделать это правильно.

В прошлом я всегда сохранял идентификатор корзины в постоянном Session["CartID"] хранилищеи как печенье.Всякий раз, когда мне нужно отобразить корзину, я буду искать элементы корзины пользователя из моих таблиц Carts и CartItems.Но внутри я знаю, что более строго типизированный подход будет чище.

После поиска в Google для последней сессии MVC я нашел термин HttpSessionStateWrapper, который, кажется, является тестируемым способом работы с сессиями.Но я не нашел ни одного хорошего учебника или стандартизированной реализации.Может быть, это просто модное слово, и я должен придерживаться Session["..."].

Как правильно реализовать корзину покупок с использованием сеансов в последней версии ASP.NET MVC?

Ответы [ 2 ]

4 голосов
/ 22 ноября 2010

Стив Сандерсон в своей книге Pro ASP.NET MVC 2 Framework дает хороший пример того, как реализовать корзину покупок с использованием сеанса в ASP.NET MVC. Если у вас нет книги, вы можете получить идею, прочитав здесь . Это очень аккуратный подход. Идея состоит в том, чтобы создать связующую модель, которая берет корзину покупок из сеанса. Действия, которые используют корзину покупок, получат корзину, "внедренную" связывателем модели. Когда вы тестируете эти методы, ваши тесты должны отвечать за передачу корзины покупок в действие.

0 голосов
/ 22 ноября 2010

MVC использует тестируемую и насмешливую абстракцию класса HttpContext с именем HttpContextBase.Вам вообще не нужна оболочка, и вы все равно можете издеваться и тестировать ваши контроллеры.

Первый пример, который я нашел в Google: http://weblogs.asp.net/andrewrea/archive/2009/08/10/mocking-the-session-object-with-moq-inside-asp-net-mvc-and-having-a-clean-builder-method-for-session-values-in-the-controller.aspx

...