Каков хороший способ реализовать события в пассивном режиме просмотра?
-
18-09-2019 - |
Вопрос
Я изучаю шаблон пассивного просмотра, чтобы сохранить мое приложение C # WinForms его проще тестировать и поддерживать.
До сих пор это работало хорошо, но мне интересно, есть ли лучший способ реализовать События, чем то, как я делаю это сейчас (и сохраняю их тестируемыми).Вот как это выглядит (опуская код, не относящийся к данному примеру).В принципе, что Я ищу, если есть способ пропустить подключение событий как в presenter, так и в форме, я бы предпочел выполнять всю работу в presenter.
Мой взгляд выглядит примерно так:
public interface IApplicationView
{
event EventHandler Find;
}
Мой ведущий выглядит примерно так:
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()
{
// ...
}
}
Моя WinForm выглядит следующим образом:
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;
}
}
Спасибо!
Решение
Еще один отличный ресурс для изучения MVP с WinForms - Джереми Миллерс Постройте Свою Собственную КАБИНУ Серии.Я нашел это невероятно полезным, когда учился,
Статья о Просмотр сообщения Ведущего будет вам полезен;здесь есть хорошая дискуссия об использовании событий против совершения прямых вызовов.Еще лучше то, что Агрегатор событий в статье представлен механизм "публикации / подписки", который можно использовать вместо событий, сохраняя при этом тестируемый код.Это тот подход, который я лично предпочитаю, и с которым я добился хорошего успеха.
Другие советы
Проверьте это пример того, как реализовать Пассивный вид.У него есть хороший способ подключения / размотки событий между представлением и контроллером, который возлагает большую часть работы на контроллер.