Должно ли представление не иметь ничего конкретного события в его интерфейсе и вызывать простые методы докладчика для обработки событий и не иметь никаких официальных EventHandlers? Например
// ASPX
protected void OnSaveButtonClicked(object sender, EventArgs e)
{
_Presenter.OnSave();
}
Или в представлении должны быть определены события EventHandlers в его интерфейсе и они явно связаны с событиями на странице управления
// 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;
}
Второй, похоже, очень много кода, который нужно добавить повсюду.
Мое намерение состоит в том, чтобы понять преимущества каждого стиля, а не просто общий ответ, который следует использовать. Мои главные цели - ясность и высокая ценность тестируемости. Тестируемость в целом важна, но я бы не стал жертвовать простотой и ясностью дизайна, чтобы иметь возможность добавить другой тип теста, который не приводит к слишком большому выигрышу по сравнению с тестами, которые уже возможны при более простой конструкции. Если выбор дизайна лишает большей тестируемости, пожалуйста, включите пример (псевдокод в порядке) того типа теста, который он может предложить, чтобы я мог принять решение, достаточно ли я ценю этот тип дополнительного теста. Спасибо!
Обновление: нуждается ли мой вопрос в дальнейшем уточнении?