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!
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? –
@Jay - Eine schnelle Google-Suche nach "Model View Presenter" sollte Ihnen alle Informationen geben, die Sie benötigen. – Josh
@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