Web ページに Model-View-Presenter パターンを使用しています。プレゼンターがセッションを認識している必要がありますか、それともビューのみが認識している必要がありますか?
私が得ているのは、セッションのような概念はビューのアーキテクチャに非常に関連しているため、ビューでの使用に制限する必要があるということですか? そうしないと、別のアーキテクチャの同様のページでプレゼンターを再利用したい場合にどうなりますか (そうする予定がない限り、心配する必要はありませんか)?
Web ページに Model-View-Presenter パターンを使用しています。プレゼンターがセッションを認識している必要がありますか、それともビューのみが認識している必要がありますか?
私が得ているのは、セッションのような概念はビューのアーキテクチャに非常に関連しているため、ビューでの使用に制限する必要があるということですか? そうしないと、別のアーキテクチャの同様のページでプレゼンターを再利用したい場合にどうなりますか (そうする予定がない限り、心配する必要はありませんか)?
私は MVP 実装でこのようなことをしています。ICookieManager、ISessionManager、ICacheManager、IConfigurationManager、IRedirector をプレゼンターに挿入します。これらは、この機能をラップするクラスによって実装されます。
これにより、これらのモック バージョンを挿入できるプレゼンターが可能になり、プレゼンターの asp.net ランタイムに直接依存しないため、テストが容易になります。
乾杯
使用しているセッションへのラッパーとして機能する共有モジュールである可能性もあります。このようにして、すべてのコントローラーで使用できるようになり、セッションの物理的な実装を簡単に変更できます。
プレゼンターは、コントローラーがセッションから取得したものでビューを埋めます。
皆さんの回答に感謝しますので、要約すると...
実際には、プレゼンターはセッションから (できればインターフェイス経由で) データにアクセスできるべきであり、そのビューはそれにアクセスすべきではありません (ダムのままです)。
はい、鳩が言うように、セッションにアクセスするものはすべて別のクラスにラップします。
これは、このタイプのモック クラスを挿入して、Session のさまざまな値をシミュレートできることを意味します。
より具体的にあなたの質問に答えるために、私はビューを非常にばかげた状態に保つSupervising-Presenter パターン ( http://martinfowler.com/eaaDev/SupervisingPresenter.html ) を使用する傾向があります。そのため、Presenter だけが Session にアクセスし (前に述べたように直接ではありません)、View に何をすべきかを伝えます。
パッシブ MVP のアプローチも研究しています。私はウェブ上でいくつかのことが行われているのを見てきましたが、どちらもセッションの永続性をビューに任せています - ハトが述べたように注入、または明示的な管理のいずれかです。
依存性注入の例は、http: //www.codeproject.com/KB/aspnet/Advanced_MVP.aspxとhttp://geekswithblogs.net/opiesblog/archive/2006/06/30/83743.aspxで確認できます。ここでの秘訣は、すべてのセッション インスタンスを静的変数で管理し、それらが互いに上書きしないようにすることです。(最初の例がこれを適切に達成しているかどうかはわかりません。)
2 番目のアプローチは、http: //codebetter.com/blogs/jeffrey.palermo/archive/2005/03/28/128592.aspxです。この例では、ビューはその状態を保存する方法を知っています。欠点は、プレゼンターがデータをビューに入れるたびに、ビューで Update メソッドを呼び出して再バインドを強制する必要があることです。これは上記の例では必要ありませんが、セッションのテーブルを管理する必要はありません。このアプローチがモック ツールを使用したテストをどのように複雑にするかはわかりません。
再利用しようとしているオブジェクト、またはほとんどのビジネス ロジックが含まれているオブジェクトによって異なります。
そのオブジェクトはMVPのコントローラーに最も近いものであるため、セッションを知っているのはプレゼンターだけだと思います。
ヒントは、すべての消費可能なエンティティをインターフェースすることです。これにより、プレゼンターとモデルをモックでテストしやすくなり、動作にテストを集中させることができます。