2010-12-29 2 views
0

私はMVPパターンを学んでいますが、まだ疑問があります。MVP:サードパーティのコントロール、ビューレイヤーに入れることができるロジックの量

Martin Hunter彼のMVC/MVPの概要が書いで:

をMVPで、ビューは、その目的は、ユーザへの提示を提供することに純粋である超薄成分となります。このビューは、ユーザーが作成したイベントをキャッチして処理しますが、対処方法を知っているプレゼンターに直接転送します。

(...)

MVPとビューが発生したイベントをキャッチし、コントローラ(プレゼンター)

に転送しますが、これは、ボタンやテキストボックスと罰金ですが、どのような場合でもっと複雑なコントロールがいくつかありますか? DevexpressのTreeListコントロールのようなサードパーティのコンポーネントを使用しているとします。ユーザーが展開ボタン「+」をクリックしたときにサブノードを作成するとします。任意のパターンを使用していない私はそのようにこれをコーディングすることができます:

private void BeforeExpand_EventHandler(object sender, BeforeExpandEventArgs e) 
{ 
    TreeList treeList = sender as TreeList; 
    MyModelObject nodeObj = e.Node.Tag as MyModelObject; 

    treeList.BeginUnboundLoad(); 

    //Create sub-nodes depending on nodeObj 

    treeList.EndUnboundLoad(); 
} 

あなたがそうでBeforeExpandEventArgs、TreeListNode、BeginUnboundLoad()のようないくつかの具体的な行動、などいくつかのビュー・オブジェクトが存在している見ることができるように。その場合、私のViewレイヤーは「極薄」にはなりません。 BeforeExpandEventArgsのようなPresenterオブジェクトに直接渡すことはできません。なぜなら、それはPresenterにいくつかのView要素を与えるためです。

私の質問は次にあります:どのくらいのロジックを表示レイヤーに入れることができますか?たとえば、以下のコードはokですか?

private void BeforeExpand_EventHandler(object sender, BeforeExpandEventArgs e) 
{ 
    TreeList treeList = sender as TreeList; 
    MyModelObject nodeObj = e.Node.Tag as MyModelObject; 

    treeList.BeginUnboundLoad(); 

    e.Node.Nodes = this.presenter.GetNodes(nodeObj); 

    treeList.EndUnboundLoad(); 
} 

答えて

0
  1. 私は、ビューがMVP(MVC)のこのissue.Theのアイデアを処理するための責任があると思うあなたは、少なくとも理論的にモデル&プレゼンターを変更することなく、他のビューに切り替えることができるということです;)。そのため、ビューロジックはビューレイヤーにとどまる可能性があります。
  2. あなたのサンプルで私が同意しないことの1つは、発表者への参照です。あなたはその反対をするべきです。プレゼンターは、ViewオブジェクトとModelオブジェクトを参照する必要があります。この場合、ViewはPresenterがすでに待機しているイベントを呼び出し、Presenterはノードの配列をViewに返します。
関連する問題