Координирование триад MVP

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

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

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

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

Беспокоитесь, что у докладчиков не должно быть общедоступного интерфейса (подход "сначала докладчик"), и это нарушает это.

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

1 ответ

Решение

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

  1. Используйте шаблон агрегатора событий, и пусть отдельные докладчики запускают события, которые могут обрабатывать другие докладчики. например, 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; }
}
Другие вопросы по тегам