Czy w widoku nie ma nic konkretnego dla konkretnego interfejsu i czy można wywołać prezentera zwykłymi metodami obsługi zdarzeń i nie mieć żadnych oficjalnych zdarzeń EventHandlers? Na przykładFormularze WWW Widok pasywny MVP - obsługa zdarzeń
// ASPX
protected void OnSaveButtonClicked(object sender, EventArgs e)
{
_Presenter.OnSave();
}
Albo powinno widok nie EventHandlers zdarzeń określonych w jego interfejs i połączyć te się jawnie kontrolować wydarzenia na stronie
// 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;
}
Drugi wydaje się dużo kodu wodociągowej dodać wszędzie.
Moim zamiarem jest zrozumieć korzyści płynące z każdego stylu, a nie tylko ogólną odpowiedź, której należy użyć. Moimi głównymi celami jest jasność i testowalność o wysokiej wartości. Ogólna testowalność jest ważna, ale nie poświęciłbym prostoty i jasności projektu, aby móc dodać kolejny typ testu, który nie prowadzi do zbyt dużego zysku w testach już możliwych dzięki prostszemu projektowi. Jeśli wybór projektu przestaje być bardziej testowalny, proszę podać przykład (pseudo-kod jest w porządku) typu testu, który teraz może zaoferować, więc mogę podjąć decyzję, jeśli wystarczająco cenię tego typu dodatkowy test. Dzięki!
Aktualizacja: Czy moje pytanie wymaga dodatkowych wyjaśnień?