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