MVP, Winforms -Обработчики событий или делегаты

. Я реализовал шаблон MVP в нескольких приложениях WinForms, использующих пассивное представление. Я реализую интерфейс, содержащий свойства и делегаты в форме Action и Func, чтобы связать события пользовательского интерфейса с конкретными представлениями и выполнить обратный вызов ведущему.

Я собираюсь начать новый проект и провел небольшое исследование шаблона в Интернете, включая множество примеров шаблона здесь, и заметил, что все используют EventHandler для уведомления докладчиков.

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

У меня вопрос: это делается для того, чтобы оставаться последовательным в том, как платформа.Net использует события, или по какой-то другой причине, которую я не вижу?

Вот тривиальный пример шаблона, который я использую:

public interface IViewAbstraction
{
    public ModelData ModelData { set; }
    public Action<ModelData> ModelDataChangedCallback { set; }
}

public class SomeWinForm : Form, IViewAbstraction
{
    private Action<ModelData> modelDataChanged;
    private ModelData model;

    public ModelData ModelData
    {
        set { /* when this property changes, update UI */ }
    }

    public Action<ModelData> ModelDataChangedCallback
    {
        set { modelDataChanged = value; }
    }

    private void OnSomeWinformsEvent(EventArgs args)
    {
        if (modelDataChanged == null) throw new Exception();

        modelDataChanged(model);
    }
}

public class Presenter
{
    private readonly IViewAbstraction view;
    private readonly IDataLayerAbstraction dataLayer;

    public Presenter(IViewAbstraction view, IDataLayerAbstraction dataLayer)
    {
        this.dataLayer = dataLayer;
        this.view = view;
        this.view.ModelDataChangedCallback = OnModelChanged;
        this.view.ModelData = dataLayer.GetData();
    }

    private void OnModelChanged(ModelData data)
    {
        // validate and save data.
    }
}
7
задан Neil M 30 April 2012 в 22:08
поделиться