4

MVPパターンを使用して一種のマスター/詳細UIを作成しようとしています。私にはいつもの容疑者がいます:

interface IMainView{}
class MainView: Form, IMainView{}

interface IMainPresenter{}
class MainPresenter{}

// Numerous domain objects

また、独自のMVPトライアドのビューでもあるUserControlがあります。

interface ISubView{}
class SubView: UserControl, ISubView{}

interface ISubPresenter{}
class SubPresenter{}

MainPresenterはSubPresenterのインスタンスを作成し、SubPresenterはSubViewのインスタンスを作成します。私の問題は、ビューに相互の参照が含まれていないか、相互が存在することさえ知らないことです。彼らは自分のプレゼンターについてしか知りませんが、UserControlである1つのビューを、フォームである別のビューにアタッチしたいと思います。これは、各ビューの互いの無知を実行し、維持することは可能ですか?

この時点まで、すべてのビューで各プレゼンターが必要とするプロパティがシステムタイプとして公開されていたため、ListBoxがComboBoxまたはRadioGroupに変更されてもプレゼンターは影響を受けません。可能であればこのままにしておきたいのですが、他に選択肢がない場合は、このパターンを破るつもりです。

これを行う理由は、MainViewがユーザーにオブジェクトのコレクションを表示するためです。各オブジェクトは、いくつかの(50を超える)異なるクラスの1つにすることができます。すべてが共通のインターフェースを実装しますが、各オブジェクトを操作するためのUIは、基礎となるクラスによって異なります。

ちなみに、これは.NET 2.0を対象としたWinformsアプリケーションです(ただし、C#3.0としてコンパイルされています)

4

1 に答える 1

2

これを解決するには、サブプレゼンターにビューへの参照をメインプレゼンターに渡し、メインプレゼンターがそれをビューに渡し、メインプレゼンターがそれを空のパネルに割り当てます。

subView
  |
  V
subPresenter
  |
  V
mainPresenter
  |
  V
mainView

これは単純な古いオブジェクトとして渡されるため、どちらのプレゼンターもwinforms名前空間への参照を含める必要はありません。mainViewは、単にUserControlの子孫であると想定し、そのようにキャストします。

于 2009-09-17T20:23:16.493 に答える