2010-11-22 16 views
9

ASP.NET MVCで認証されていないユーザーに対して簡単なセッションカートを実装しています。ショッピングカートのセッション状態がASP.NET MVCで正しく行われました

私は以前、永続的なSession["CartID"]ストアに、またクッキーとしてカートIDを保存していました。カートを表示する必要があるときはいつでも、私はCartsCartItemsテーブルからユーザーのカートアイテムを調べます。しかし、私は、より強く型付けされたアプローチがより洗練されたものであることを知っています。

最新のセッションMVCの検索で、HttpSessionStateWrapperという用語が見つかりました。これはセッションをテストするための方法です。しかし、私は良いチュートリアルや標準化された実装が見つかりませんでした。多分それはちょうど流行の言葉であり、私はSession["..."]に固執するべきです。

最新のバージョンのASP.NET MVCでセッションを使用してショッピングカートを実装する正しい方法は何ですか?

答えて

4

スティーブサンダーソン、彼の本のPro ASP.NET MVC 2フレームワークでは、ASP.NET MVCでのセッションを使用してショッピングカートを実装する方法の良い例を示します。あなたが本を持っていなければ、hereというアイデアを得ることができます。それは非常にきちんとしたアプローチです。アイデアは、ショッピングカートをセッションから取り出すモデルバインダーを作成することです。ショッピングカートを使用する動作では、モデルバインダーによってカートが「注入」されます。これらのメソッドをテストしているときは、ショッピングカートをアクションに渡す必要があります。

+0

ありがとう、これは私が探していたものです。 –

+0

@uvita私はこの考えが好きですが、セッション中のカート全体を悪い考えで保管していませんか?私はセッションを小さく保つように言われているので、過去にこれをやっていることを意図的に避けていましたが、その親指をつかんで行くと、素晴らしい読書もありがとう。 –

0

MVCは、HttpContextBaseと呼ばれるHttpContextクラスの、テスト可能でモックが可能な抽象化を使用します。あなたはラッパーをまったく必要とせず、あなたのコントローラーをうまく模倣してユニットテストすることができます。

私は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

+0

これは、 'int pageSize = Session [" SpaceController!Index!PageSize "] == nullのような"汚れた "コードのセッション状態の模擬実装です。 10:Convert.ToInt32(Session ["SpaceController!Index!PageSize"]); 'より洗練された強く型付けされた方法が試され、テストされていますか? –

+0

あなたが嘲笑する方法はあなた次第です。セッションアクセスを強く入力する方法はあなた次第です。セッションは文字列キーに依存し、オブジェクトを格納します。あなたはある時点でそれらと仕事をしなければなりません。 Asp.net MVCの主な違いを指摘したいと思います。 – jfar

関連する問題