Sollte die Ansicht in ihrer Schnittstelle nichts ereignisspezifisches haben und den Moderator einfache Methoden aufrufen, um mit Ereignissen umzugehen und keine offiziellen Event-Handler zu haben? Zum BeispielWebforms MVP Passive View - Ereignisbehandlung
// ASPX
protected void OnSaveButtonClicked(object sender, EventArgs e)
{
_Presenter.OnSave();
}
Oder sollte der Blick in seinem Schnittstelle Ereignisse Eventhandler definiert hat und die explizit verknüpfen Vorgänge steuern auf der Seite
// View
public interface IView
{
...
event EventHandler Saved;
...
}
// ASPX Page implementing the view
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
SaveButton.Click += delegate { Saved(this, e); };
}
// Presenter
internal Presenter(IView view,IRepository repository)
{
_view = view;
_repository = repository;
view.Saved += Save;
}
Die zweite scheint wie eine ganze Reihe von Sanitär-Code hinzufügen überall.
Meine Absicht ist es, die Vorteile jedes Stils zu verstehen und nicht nur eine allgemeine Antwort zu verwenden. Meine Hauptziele sind Klarheit und hohe Testbarkeit. Testbarkeit insgesamt ist wichtig, aber ich würde Design Einfachheit und Klarheit nicht opfern, um in der Lage zu sein, eine andere Art von Test hinzuzufügen, die nicht zu viel Gewinn über die Testfälle hinaus führt, die bereits mit einem einfacheren Design möglich sind. Wenn eine Design-Option mehr Testbarkeit bietet, fügen Sie bitte ein Beispiel (Pseudo-Code ist in Ordnung) der Art von Test, die es jetzt bieten kann, so kann ich meine Entscheidung treffen, wenn ich diese Art von Extra-Test genug bewerten. Vielen Dank!
Update: Braucht meine Frage weitere Klärung?