Когда следует использовать обработчик событий вместо агрегатора событий?

Когда следует использовать обработчик событий, а не агрегатор событий?

В моем коде у меня есть две ViewModel, которые контролируются родительской ViewModel, я пытаюсь решить, должен ли я просто использовать обработчик событий для общения между ними? Или использовать агрегатор событий? Это будет просто вызов метода, я не требую передачи параметров между ними.


person Bob.    schedule 26.11.2012    source источник


Ответы (2)


На мой взгляд, EventAggregator обычно является тяжелым оружием, используемым, когда вы хотите опубликовать событие для всего приложения, а точнее, когда вы не знаете, кто точно слушает.

В вашем сценарии это не совсем так, у вас есть две модели представления, которые хотят общаться, но они обе знают друг друга. Так что нет никакой реальной причины, по которой вы не можете использовать events.

Я просто упомяну, что если вы хотите, чтобы это было немного более слабо связанным, создайте интерфейс для каждой из моделей представления, которые раскрывают событие. Таким образом, каждая ВМ будет использовать интерфейс другой ВМ вместо конкретного экземпляра.

person Blachshma    schedule 26.11.2012
comment
Можете ли вы объяснить последний раздел на примере? - person Bob.; 26.11.2012
comment
Мой последний раздел в основном актуален, если вы используете какую-либо IoC таких как MEF, в которых вы точно не знаете, кто реализует конкретный интерфейс, вы знаете только сам интерфейс. Итак, в этом примере у вас будет 2 интерфейса IVM1 и IVM2, каждый из которых будет иметь событие. VM1 (который реализует IVM1) не знает VM2, он знает только IVM2, но поскольку событие объявлено IVM2, этого достаточно. - person Blachshma; 26.11.2012
comment
Модели представления не обязательно должны знать друг друга. - person dthal; 14.05.2019

Вот ссылка с некоторой полезной информацией (действующей по состоянию на 5/2019 г.)... https://docs.microsoft.com/en-us/previous-versions/windows/apps/xx130639(v%3Dwin.10) (Microsoft , призма)

В разделе «Принятие ключевых решений» описывается, когда его использовать.

События в .NET реализуют шаблон публикации-подписки. Время жизни издателя и подписчика связано друг с другом ссылками на объекты, и тип подписчика должен иметь ссылку на тип издателя.

Агрегация событий — это шаблон проектирования, который обеспечивает связь между классами, которые неудобно связывать с помощью ссылок на объекты и типы. Этот механизм позволяет издателям и подписчикам общаться, не ссылаясь друг на друга. Следовательно, события .NET следует использовать для связи между компонентами, у которых уже есть отношения ссылки на объект (например, элемент управления и страница, которая его содержит), а агрегацию событий следует использовать для связи между слабо связанными компонентами (например, двумя отдельными моделями просмотра страниц). в приложении). Дополнительные сведения см. в разделе Агрегация событий.

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

person dthal    schedule 14.05.2019