2010-12-28 5 views
3

私たちは現在のプロジェクト(asp.net app)でMVPパターンを使用しようとしており、いくつかの問題にぶつかっています。ページには複数のセクションがあり、これらの独立セクションにユーザーコントロールを使用しています。各ユーザーコントロールには独自のビューとプレゼンターがあり、ページはベースビューとして機能します。今問題は、ユーザーコントロールが必要とするデータをどのように渡すべきかということです。MVPパターン - デザイン質問

現在のデザインでは、ページプレゼンターはページ全体に必要なデータを取得します。このデータはどのようにしてユーザーコントロールプレゼンターに渡すことができますか?

私たちが考えている他のアプローチは、代わりにユーザーコントロール用のビューのみを作成し、すべてのイベントを処理するためにページプレゼンターを使用することです。この場合、各ユーザーコントロールビューで複数のビューインターフェイスを実装する予定です。しかし、ページプレゼンターはどのようにしてさまざまなビューと相互作用しますか?

おかげで、 JBN

答えて

1

なぜユーザーコントロールに独自のビューとプレゼンターがあるのですか?

私はページのビューとプレゼンターを持ち、ページビューを介してユーザーコントロールと対話することをお勧めします。イベントを処理したり、ユーザーコントロールとの間でデータをやり取りしたりする必要がある場合は、それらをページに公開することができ、ページビューはプレゼンターのためにラップできます。ラッピングにより、プレゼンターはユーザーコントロールと直接通信することができません。ここで

は、いくつかの擬似コードです:

IFooPageView 
{ 
    string SomeData {get; set;} 
    event EventHandler SomeEvent; 
} 

public class FooPageView : IFooPageView 
{ 
    public event EventHandler SomeEvent; 
    public SomeData 
    { 
     get { return myUserControl.SomeData;} 
     set { myUserControl.SomeData = value;} 
    } 

    protected override void OnInitComplete(EventArgs e) 
    { 
    //handle the user control event 
    this.myUserControl.SomeEvent += SomeEvent_EventHandler; 
    } 

    private void SomeEvent_EventHandler(object sender, EventArgs e) 
    {    
     //Raise the user control event to the presenter 
     if (SomeEvent!= null) 
      SomeEvent(this, EventArgs.Empty); 
    } 
} 

私はフィル・ハークのASP.NET Supervising Controller (Model View Presenter) From Schematic To Unit Tests to Code

フィルの記事では、Webフォームのために良いMVP情報がたくさんあると読んでいました。

+0

が最終的にあなたが概説したアプローチに行きました。 :) – jbagavathi

+0

私はそれが助けてうれしいです。 –

+0

複数のページで同じユーザーコントロールを使用している場合(例:アドレスコントロールのような共通のものは、これは上記のロジックの大半が各ページに複製されることを意味しませんか? – Rezler

0

私はトップレベルのプレゼンターで構成さプレゼンターのリストを維持

の1-考えることができる解決策の一つ、あなたはトップレベルのプレゼンターでデータを得たとき、あなたリストから適切なプレゼンターを選んでデータを配信することができます。

0

MVPに正確に合っているかどうかはわかりませんが、UCからプロパティ(View)を公開し、そのページのデータで更新することができます。