2009-11-05 14 views
6

Ich lerne das Passive View-Muster, um meine C# WinForms-Anwendung einfacher zu testen und zu warten.Was ist eine gute Möglichkeit, Ereignisse in der passiven Ansicht zu implementieren?

Es hat bisher gut funktioniert, aber ich frage mich, ob es eine bessere Möglichkeit gibt, Events als die Art, wie ich es jetzt mache (und sie testbar halten). Dies ist , wie es aussieht (Code weglassen für dieses Beispiel nicht relevant). Im Grunde, was Ich bin auf der Suche nach, wenn es einen Weg gibt, Ereignisse sowohl in der Presenter und in der Form zu überspringen, würde ich es vorziehen, alle Arbeiten im Presenter zu tun.

Meine Ansicht sieht wie folgt aus:

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() 
    { 
     // ... 
    } 
} 

Mein WinForm sieht aus wie:

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

Dank

public interface IApplicationView 
{ 
    event EventHandler Find; 
} 

Mein Moderator sieht wie folgt aus!

+0

Ich kann dir nicht helfen, aber wonach du fragst, sieht interessant aus. Können Sie mich auf Ihre bevorzugte Online-Ressource verweisen, die die Technik beschreibt, die Sie implementieren möchten? –

+0

@Jay - Eine schnelle Google-Suche nach "Model View Presenter" sollte Ihnen alle Informationen geben, die Sie benötigen. – Josh

+0

@Jay Martin Fowler prägte das Designmuster Passive View, als er das MVP-Muster zurückzog und es in zwei neue aufteilte. Wo Passive View ist einer von ihnen, siehe http://martinfowler.com/eaaDev/PassiveScreen.html – devghost

Antwort

3

Eine weitere großartige Ressource für das Lernen von MVP mit WinForms ist Jeremy Millers Build Your Own CAB Serie. Ich fand das unglaublich nützlich, als ich lernte,

Der Artikel auf View to Presenter Communication wird Ihnen nützlich sein; Es gibt eine gute Diskussion über die Verwendung von Ereignissen im Vergleich zu direkten Anrufen. Noch besser, der Event Aggregator Artikel präsentiert einen "publish/subscribe" -Mechanismus, der anstelle von Ereignissen verwendet werden kann, während der Code testbar bleibt. Das ist der Ansatz, den ich persönlich bevorzuge und mit dem ich guten Erfolg hatte.

+0

Der Event-Aggregator sieht interessant aus, ich werde es an diesem Wochenende anschauen und sehen, wie es sich entwickelt. – devghost

0

Beispiel this Beispiel für die Implementierung der passiven Ansicht. Es hat eine gute Möglichkeit für Ereignisse zwischen der Ansicht und dem Controller, die den größten Teil der Arbeit in den Controller stecken.

+0

Schlechte Verbindungen. Sowohl die alte als auch die neuere. Bitte posten Sie keine externen Links auf SO. Sie neigen dazu, stillgelegt zu werden. – Heliac

Verwandte Themen