Страницы

вторник, 16 августа 2011 г.

Реализуем EventPublisher. Шаг первый.

 Шаблон EventAggregator (он же EventPublisher, он же EventBroker) известен давно, и описан Фаулером еще в 2004 году. Обобщённую реализацию для .NET можно найти в серии Build your own CAB  под пунктом 13а.  Основная идея проста: за счёт единообразной диспетчеризации сообщений упрощается код клиентского класса, уменьшается число его зависимостей.
  В интернете можно найти много и других реализаций. Так собственно, зачем городить еще одну? Ответ прост: хочется получить более мощные возможности по модификации поведения, и естественно, получить полный контроль над проектом (как первый этап плана по захвату мира).

public interface IPublisher
{
    void Publish<TMessage>(TMessage "message"); 
}

 Обычно IPublisher включает методы подписки/отписки получателей сообщений. Но это неправильно: многим классам надо только отправлять сообщение. Поэтому вооружимся ISP, и выделим подписку в отдельный интерфейс:
public interface IAssignee : IListenerSource
{
    void Subscribe(object listener);

    void Unsubscribe(object listener);
}

И конечно же, осталось ввести интерфейс для подписчиков:
public interface IListener<TMessage>
{
    void ListenTo(TMessage message);
}
Обобщённая версия интерфейса подписчика даёт большое преимущество: статическую типизацию получателей сообщений по типу сообщения.
Скелет будущего диспетчера событий готов. В следующих частях серии займемся его реализацией.
Код проекта на есть Github.

Комментариев нет:

Отправить комментарий