Координирование триад MVP - PullRequest
1 голос
/ 22 ноября 2010

Скажем, у вас есть несколько триад MVP в вашем приложении (приложение WinForms .NET 2.0), и каждая триада следит за одной областью ответственности. Как вы предпочитаете координировать связь между триадами MVP?

Вариант 1 Объект-координатор, который «имеет» каждую модель и следит за координацией, подписываясь на необходимые события в каждой и затем решая, какие методы модели вызывать в каких сценариях.

Беспокойся, что это может быть класс "бога".

Вариант 2 У докладчика «есть» другой докладчик, и когда в модели происходит что-то интересное, докладчик использует другого докладчика для продвижения коммуникации.

Опасайтесь, что у докладчиков не должно быть общедоступного интерфейса (подход «сначала докладчик»), и это ломает это

Мне просто интересно, что другие люди сделали, чтобы решить эту проблему масштабируемым способом ОО. Что если я добавлю еще одну триаду MVP? Насколько сложно будет вписать это в мой координатор? Должно быть несколько хороших примеров того, как управлять несколькими триадами MVP в приложении WinForms?

1 Ответ

3 голосов
/ 22 ноября 2010

Не быть смутным ... но это зависит. Два подхода, которые я использовал в прошлом:

  1. Используйте шаблон Event Aggregator , и пусть отдельные докладчики запускают события, которые могут обрабатывать другие докладчики. например PresenterA выполняет: events.Raise<MyEvent> (), а PresenterB реализует: IHandler<MyEvent> и соответственно реагирует в своем методе public void Handle (MyEvent @event).
  2. Используйте общую модель, которая вводится в докладчиков, которые необходимо координировать. Например, если один докладчик обрабатывает выбор данного Foo, а другому докладчику необходимо обновить панель сведений с подробностями Foo, я мог бы использовать модель состояния IFooSelection и внедрить ее в обоих докладчиков, которым необходимо согласовать концепцию «текущего выбора». .

Интерфейс:

public interface IFooSelection {
    public event EventHandler Changed;
    Foo Selected { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...