Frage

Ich lerne das Passive Ansicht Muster meine C # WinForms-Anwendung zu halten einfacher zu testen und zu erhalten.

Es hat gut funktioniert so weit, aber ich frage mich, ob es eine bessere Art und Weise zu implementieren Veranstaltungen als die Art, wie ich es jetzt tue (und halten sie prüfbar). Das ist wie es aussieht (Code nicht relevant für dieses Beispiel weggelassen). Im Grunde, was Ich suche, wenn es eine Möglichkeit Ereignisse zu überspringen ist Einhaken sowohl in der Moderator und in Form, ich würde es vorziehen, alle Arbeiten in dem Moderator zu tun.

Meine Ansicht sieht wie folgt aus:

public interface IApplicationView
{
    event EventHandler Find;
}

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

Meine WinForm wie folgt aussehen:

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

Danke!

War es hilfreich?

Lösung

Eine weitere große Ressource für das Lernen MVP mit WinForms ist Jeremy Millers Eigenbau CAB Serie. Ich fand diese unglaublich nützlich, wenn ich lernte,

Der Artikel über die Blick auf Presenter Kommunikation für Sie nützlich sein wird; gibt es eine gute Diskussion hier über Veranstaltungen mit direkten Anrufen vs machen. Noch besser ist, die Event-Aggregator Artikel stellen einen‚Publish / subscribe‘Mechanismus, der anstelle von Veranstaltungen genutzt werden kann, während der Code testbar. Dies ist der Ansatz, den ich persönlich vorziehen, und haben mit gutem Erfolg hatte.

Andere Tipps

Check out dieses Beispiel dafür, wie die Passive-Ansicht zu implementieren. Es hat eine gute Art und Weise der Verkabelung / unwiring für Veranstaltungen zwischen dem View und Controller, die die meiste Arbeit in der Steuerung setzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top