3

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

現在の設計に従って、ページ プレゼンターはページ全体に必要なデータを取得します。このデータをユーザー コントロール プレゼンターに渡す方法を教えてください。

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

ありがとう、jbn

4

3 に答える 3

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);
    }
}

Phil Haack のASP.NET Supervising Controller (Model View Presenter) From Schematic To Unit Tests to Code を読みます。

Phil の記事には、Web フォームの優れた MVP 情報がたくさんあります。

于 2010-12-28T17:56:15.313 に答える
0

私が考えることができる解決策の1つ

1- 構成されたプレゼンターのリストをトップ レベル プレゼンターで維持し、トップ レベル プレゼンターでデータを取得したら、リストから適切なプレゼンターを選択してデータを配布できます。

于 2010-12-28T17:22:50.893 に答える
0

MVP に正確に適合するかどうかはわかりませんが、UC からプロパティ (ビュー) を公開し、それをページ内のデータで更新できます。

于 2010-12-28T17:29:35.583 に答える