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としてコンパイルされています)