2010-11-22 4 views
1

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

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

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

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

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

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

ответ

3

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

  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; } 
}