Координирование триад MVP
Скажем, у вас есть несколько триад MVP в вашем приложении (приложение WinForms .NET 2.0), и каждая триада заботится об одной области ответственности. Как вы предпочитаете координировать связь между триадами MVP?
Вариант 1 Объект-координатор, который "имеет" каждую модель и следит за координацией, подписываясь на необходимые события в каждой и затем решая, какие методы модели вызывать в каких сценариях.
Беспокойся, что это может быть "бог" класс.
Вариант 2 Докладчик "имеет" другого докладчика, и когда в модели происходит что-то интересное, докладчик использует другого докладчика для продвижения коммуникации.
Беспокоитесь, что у докладчиков не должно быть общедоступного интерфейса (подход "сначала докладчик"), и это нарушает это.
Мне просто интересно, что другие люди сделали, чтобы решить эту проблему масштабируемым способом ОО. Что если я добавлю еще одну триаду MVP? Насколько сложно будет вписать это в мой координатор? Должны быть хорошие примеры того, как управлять несколькими триадами MVP в приложении WinForms?
1 ответ
Не быть смутным... но это зависит. Два подхода, которые я использовал в прошлом:
- Используйте шаблон агрегатора событий, и пусть отдельные докладчики запускают события, которые могут обрабатывать другие докладчики. например, PresenterA делает:
events.Raise<MyEvent> ()
и PresenterB реализует:IHandler<MyEvent>
и реагирует соответственно в егоpublic void Handle (MyEvent @event)
метод. - Используйте общую модель, которая вводится в докладчиков, которые необходимо координировать. Например, если один докладчик обрабатывает выбор данного Foo, а другому необходимо обновить панель сведений с подробностями Foo, я мог бы использовать модель состояния IFooSelection и внедрить ее в обоих докладчиков, которым необходимо согласовать концепцию "текущего выбора". ".
Интерфейс:
public interface IFooSelection {
public event EventHandler Changed;
Foo Selected { get; set; }
}