2009-07-29 13 views
3

私は、MVPパターンを使用して一種のマスター/ディテールUIを作成しようとしています。今度は、作成SubPresenterのフォームにMVPパターンでUserControlを添付するにはどうすればよいですか?

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

interface ISubPresenter{} 
class SubPresenter{} 

MainPresenterを作成し、インスタンス:

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

interface IMainPresenter{} 
class MainPresenter{} 

// Numerous domain objects 

私もまた、自身のMVPのトライアドのビューでユーザーコントロールを持っている:私はいつもの容疑者を持っていますSubViewのインスタンス私の問題は、ビューはお互いへの参照を含んでいないか、お互いが存在することを知ることさえあります。彼らは自分のプレゼンターについてしか知りませんが、私はフォームである別のビューにUserControlであるビューを添付したいと思います。これは可能なのですか、お互いの見解を無視していますか?

これまで、すべてのビューで各プレゼンターがシステムタイプとして必要とするプロパティが公開されていたため、ListBoxをComboBoxまたはRadioGroupに変更してもプレゼンターは影響を受けませんでした。私は可能な限りこの方法でそれを保持したいと思いますが、私は他の選択肢がなければこのパターンを破ることを喜んでします。

これを行う理由は、MainViewがユーザーにオブジェクトのコレクションを提示するためです。各オブジェクトは、いくつかの(50以上の)異なるクラスの1つになることができます。すべてが共通のインターフェースを実装しますが、各オブジェクトを操作するためのUIは、基礎となるクラスによって異なります。ちなみに、これは.NET 2.0をターゲットのWinFormsアプリケーションで

(それはしかしC#3.0のようにコンパイルされます)

答えて

1

Iはsubpresenterがそれを通過する主プレゼンタへのビューへの参照を渡す有することによってこれを解決ビューに移動し、空のパネルに割り当てます。

subView 
    | 
    V 
subPresenter 
    | 
    V 
mainPresenter 
    | 
    V 
mainView 

プレゼンターがどちらもwinforms名前空間への参照を含める必要がないように、これは普通の古いオブジェクトとして渡されます。 mainViewは単純にそのUserControlを相殺し、それをそのままキャストします。

+0

プレゼンターがビューを作成することは禁止されています。あなたはMVPのプリンシパルールを破った! – dzendras

+0

私はモデル/ビュー/ <ここに印象的な名前を挿入>の無数の例とバリエーションを調べました。私が遭遇した唯一の一貫したルールは、ビューとモデル/ドメインとの間のあるレベルの分離を維持することです。トライアドの主要プレイヤーの作成順序、ライフタイム、所有権に関する助言があれば、研究を公開した人は避けています。 –

関連する問題