2011-09-12 5 views
8

私はC#に適用されるModel View Presenterパターンを完全に理解しようとしています。私は私の頭を包むことができない1つの質問があります。モデルビュープレゼンター:なぜモデルは静的ですか?

多くの例では、モデルが静的として定義され、Presenterベースクラス(しばしばジェネリッククラス)で構築されていることに気付きました。

この場合、どのように複数のモデルクラスがありますか?私の理解から、作成されたすべてのプレゼンターは、単一のモデルクラスのみを参照することができます。

私が今見ている例は、http://wesaday.files.wordpress.com/2009/01/finalzip.doc(.zipに改名)です。 http://wesaday.wordpress.com/2009/01/30/winform-model-view-presenter-part-v-the-view/

上記のような例が、複数のビュー/プレゼンター/モデルを持つ作業アプリケーションにどのように適応するかを見ています。

答えて

4

これは、サンプルに完全なIoC実装を組み込むことを避けるために、恐らく単純化されているに過ぎません。 MVPトライアドは、通常、実行時にスタンドアロン(すなわち、静的ではない、シングルトン、または共有されていない)インスタンスによって表される。いくつかの例外的なケースでは、モデルが共有インスタンスである場合がありますが、通常はルールではなく例外です。一般に、読み取り専用のフォームやコントロールの場合のみです。

+0

私は理解していると思います。これは、プレゼンタークラスが(共有インスタンスではないので)モデルクラスを常にインスタンス化する必要があることを意味しますか? – halohunter

+2

発表者は、新しいモデルインスタンスをインスタンス化するか、外部ソースからインスタンスインスタンスを受け取る必要があります。たとえば、私は通常、ベースプレゼンターにInitialize(モデル、ビュー)メソッドを追加し、モデル値に基づいてロジックを適用して、モデルのインスタンス化方法を決定します。値がnullの場合、抽象メソッドが呼び出されて、サブクラスが新しいモデルインスタンスを作成できるようになります。値がモデルのタイプに対応する場合、プレゼンターは単純にそのモデルとしてモデルを使用します。値がモデルのIDの型に対応する場合、ID値は抽象メソッドに渡されてモデルを取得します。 –

関連する問題