パッシブ ビューでイベントを実装する良い方法は何ですか?
-
18-09-2019 - |
質問
パッシブビューパターンを学習して、C#Winformsアプリケーションをテストしてメンテナンスしやすくします。
これまでのところうまくいっていますが、イベントを実装する方法が私が今それをしている方法よりも良い方法があるのではないかと思います(そして、それらをテスト可能にしてください)。これがどのように見えるか(この例には関連性がないコードを省略します)。基本的に、私が探しているものは、プレゼンターとフォームの両方でイベントをフックアップする方法がある場合、私はプレゼンターですべての仕事をすることを好みます。
私の見解は次のようになります。
public interface IApplicationView
{
event EventHandler 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 は次のようになります。
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;
}
}
ありがとう!
解決
WinForms で MVP を学習するためのもう 1 つの優れたリソースは、Jeremy Millers です。 独自の CAB を構築する シリーズ。勉強していたときにこれがとても便利だと感じたのですが、
に関する記事 プレゼンターとのコミュニケーションを表示 あなたにとって役に立つでしょう。イベントの使用と直接呼び出しの使用については、ここで良い議論が行われています。さらに良いことに、 イベントアグリゲータ この記事では、コードをテスト可能に保ちながら、イベントの代わりに使用できる「パブリッシュ/サブスクライブ」メカニズムを紹介しています。これは私が個人的に好むアプローチであり、良い成功を収めています。
他のヒント
<のhref = "http://www.c-sharpcorner.com/uploadfile/rmcochran/implementing-the-passive-view-a-derivative-of-the%C2%A0model-view-control/チェックアウト「REL =」nofollowをnoreferrer ">パッシブビューを実装する方法のこのの例。これは、コントローラでの作業のほとんどを置くビューとコントローラ間のイベントのためにunwiring /配線の良い方法を持っています。