Каков хороший способ реализовать события в пассивном режиме просмотра?

StackOverflow https://stackoverflow.com/questions/1682352

  •  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 - Джереми Миллерс Постройте Свою Собственную КАБИНУ Серии.Я нашел это невероятно полезным, когда учился,

Статья о Просмотр сообщения Ведущего будет вам полезен;здесь есть хорошая дискуссия об использовании событий против совершения прямых вызовов.Еще лучше то, что Агрегатор событий в статье представлен механизм "публикации / подписки", который можно использовать вместо событий, сохраняя при этом тестируемый код.Это тот подход, который я лично предпочитаю, и с которым я добился хорошего успеха.

Другие советы

Проверьте это пример того, как реализовать Пассивный вид.У него есть хороший способ подключения / размотки событий между представлением и контроллером, который возлагает большую часть работы на контроллер.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top