2009-11-05 12 views
6

私がテストし、保守が容易に私のC#のWinFormsアプリケーション を維持するためにパッシブ表示パターンを学んでいます。パッシブビューでイベントを実装する良い方法は何ですか?

これまでのところうまくいきましたが、私が今やっているやり方よりもイベントを実装する方が良いかどうかは疑問です。これは のようになります(この例ではコードは不要です)。基本的に私は プレゼンターで、フォームで両方のイベントをフックスキップする方法があるある場合を探しています何 、私はプレゼンターのすべての仕事をして好むだろう。

私の見解は次のようになります。

public interface IApplicationView 
{ 
    event EventHandler Find; 
} 

私のプレゼンターは、次のようになります。

public partial class Form1 : Form, IApplicationView 
{ 
    private ApplicationPresenter _presenter; 
    public event EventHandler Find = delegate {}; 

    public Form1() 
    { 
     InitializeComponent(); 
     _presenter = new ApplicationPresenter(this); 
     HookupEvents(); 
    } 

    private void HookupEvents() 
    { 
     searchButton.Click += Find; 
    } 
} 

ありがとう:

public class ApplicationPresenter 
{ 
    private IApplicationView _view; 
    private IApplicationDomain _domain; 

    public ApplicationPresenter(IApplicationView view) : this(view, new ApplicationDomain()) {} 
    public ApplicationPresenter(IApplicationView view, IApplicationDomain domain) { 
     _view = view; 
     _domain = domain; 

     HookupEventHandlersTo(view); 
    } 

    private void HookupEventHandlersTo(IApplicationView view) 
    { 
     view.Find += delegate { FindAction(); }; 
    } 

    public void FindAction() 
    { 
     // ... 
    } 
} 

私のWinFormのように見えます!

+0

私はあなたを助けるが、何について、あなたは求めていることは面白そうすることはできません。あなたが実装しようとしている技術を説明するあなたのお気に入りのオンラインリソースを教えてください。 –

+0

@Jay - 「Model View Presenter」をGoogleですばやく検索すると、必要なすべての情報を得ることができます。 – Josh

+0

@Jay Martin FowlerはMVPパターンを廃止して2つの新しいパターンに分割したとき、パッシブビューのデザインパターンを作成しました。パッシブビューがその1つである場合、http://martinfowler.com/eaaDev/PassiveScreen.html – devghost

答えて

3

のWinFormsでMVPを学ぶためのもう一つの大きなリソースは、ジェレミー・ミラーズBuild Your Own CABシリーズです。私はView to Presenter Communication上の記事があなたに有用であろう、

を学んでいたとき、私は、これは非常に有用であることが判明しました。ここでイベントの対直接呼び出しの使用についての良い議論があります。さらに、Event Aggregatorの記事では、コードをテスト可能な状態に保ちながら、イベントの代わりに使用できる「パブリッシュ/サブスクライブ」メカニズムが提供されています。これは私が個人的に好むアプローチであり、成功しています。

+0

イベントアグリゲータは興味深いように見えますが、今週末にそれを見て、どのようになっているかを見ていきます。 – devghost

0

パッシブビューを実装する方法のthis例をご覧ください。これは、ビューとコントローラーの間のイベントをワイヤリング/ワイヤリングする優れた方法を持ち、コントローラーのほとんどの作業をコントローラーに入れます。

+0

リンクが間違っています。古いものと新しいものの両方。あなたは外部リンクを投稿しないでください。彼らは廃止される傾向があります。 – Heliac

関連する問題