Я думаю, что 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