MVVM Light Toolkit - Messenger использует агрегатор событий или шаблон посредника?

Может кто-нибудь помочь мне найти, если Класс I/Messenger (и реализация) из инструментария MVVM light демонстрирует использование Шаблон агрегатора событий или Шаблон посредника?

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

Ссылка: один сравнение между двумя шаблонами, что абсолютно интересно.


person Jsinh    schedule 30.03.2014    source источник


Ответы (1)


Я думаю, что Messenger не является ни чистым Event Aggregator, ни чистым Mediator. Если бы мне выбирать между одним из них, я бы выбрал Mediator. Давайте проведем небольшое сравнение.

Мессенджер

Messenger облегчает отправку сообщений между слабо связанными объектами. Потребители, заинтересованные в получении сообщений, могут зарегистрироваться для получения этих сообщений. Продюсеры могут использовать Messenger для рассылки сообщений:

void Register<TMessage>(object recipient, Action<TMessage> action);
void Send<TMessage>(TMessage message);

Если потребитель заинтересован только в сообщениях по определенному каналу, потребитель должен предоставить токен при регистрации. Производитель должен отправлять сообщения через этот канал, используя тот же токен:

void Register<TMessage>(object recipient, object token, Action<TMessage> action);
void Send<TMessage>(TMessage message, object token);

Это означает, что в мессенджере есть некая логика, определяющая, каким подписчикам должно быть отправлено сообщение.

Агрегатор событий

Целью агрегатора событий является просто прослушивание событий от множества объектов. Его также можно использовать для агрегирования событий. Это означает, что агрегатор событий подписывается на события от издателей, но отправляет свои собственные события своим подписчикам.

Посредник

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

Итак?

На мой взгляд, Messenger не является агрегатором событий, потому что его цель не в том, чтобы упростить обработку событий. С другой стороны, я не думаю, что это Mediator, потому что его цель не в том, чтобы решать, как объекты взаимодействуют, и не в том, чтобы навязывать логику коммуникации. Однако, если бы я выбрал, я бы сказал, что Messenger — это посредник, потому что у него есть небольшая логика для отправки сообщений по каналам.

person venerik    schedule 03.04.2014
comment
На реализацию больше влияет паттерн Mediator, предлагающий специализированные каналы для отправки сообщений. Хотя каналы предоставляются для более ситуативной передачи агрегированных сообщений с использованием одних и тех же типов для связи и не имеют отношения к определению того, как объекты взаимодействуют, или к наложению логики на это взаимодействие через Messenger. С другой стороны, базовая реализация (если не учитывать «токены») полностью соответствует предложенному шаблону агрегатора. В заключение, а не принуждать к выбору :) Messenger представляет собой смешанную, совместимую и объединенную реализацию шаблонов Mediator & Aggregator. - person Jsinh; 08.04.2014