Warenkorb session state richtig gemacht in ASP.NET MVC
Ich bin die Implementierung einer einfachen session-cart für nicht authentifizierte Benutzer in ASP.NET MVC und ich will es richtig machen.
In der Vergangenheit habe ich immer gespeichert werden, ist die cart-ID in der persistenten Session["CartID"]
laden und wie ein cookie. Wann immer ich brauche, um die Anzeige der Karre, ich werde sehen, was die Benutzer der Warenkorb Artikel aus meinem Carts
und CartItems
Tabellen. Aber im inneren weiß ich eine stärker typisierte Ansatz wäre sauberer.
Nach Googlen für die aktuelle Sitzung MVC-Zeug, ich fand den Begriff HttpSessionStateWrapper
, das scheint zu sein, prüfbar Umgang mit sessions. Aber ich habe nicht gefunden, einen guten tutorials oder standardisierte Implementierungen. Vielleicht ist es nur ein buzz-Wort, und ich sollte sein festhalten an Session["..."]
.
Welches ist die richtige Art zu implementieren einen Warenkorb mit sessions in der neuesten version ASP.NET MVC?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Steve Sanderson in seinem Buch Pro ASP.NET MVC 2 Framework, gibt ein schönes Beispiel, wie zu implementieren einen Warenkorb mit session, in ASP.NET MVC. Wenn Sie nicht das Buch haben, können Sie sich eine Vorstellung Lesen hier. Es ist eine sehr nette Ansatz. Die Idee ist, ein Modell zu erstellen, binder, nimmt der Warenkorb aus der session. Die Aktionen, die in den Warenkorb nutzen bekommen den Warenkorb "injiziert", die von der binder Modell. Wenn youre testen die Methoden, die tests verantwortlich sein sollte für die übergabe des Warenkorbs an der Aktion.
MVC verwendet, einer testbaren und mockable Abstraktion der HttpContext-Klasse genannt HttpContextBase. Sie brauchen nicht den wrapper überhaupt noch verspotten und unittest Ihre Controller nur in Ordnung.
Erste Beispiel, das ich in google gefunden:
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
int pageSize = Session["SpaceController!Index!PageSize"] == null ? 10 : Convert.ToInt32(Session["SpaceController!Index!PageSize"]);
gibt es einen Reiniger, stark typisierte Art, die versucht und getestet?