Программирование на основе публикации сообщений? - PullRequest
0 голосов
/ 15 августа 2011

С тех пор как я узнал об использовании агрегаторов событий для публикации сообщений вместо использования событий, которыми я управлял, для большинства событий в моем коде (за исключением тех, которые связывают свойства управления WPF с моим кодом). Проблема сейчас в том, что, похоже, я действительно перегружаю свои сервисы обработчиками. Вокруг GitHub я вижу людей, которые реализуют агрегаторы событий (кажется, принимают другое имя, например, шина) и создают класс для обработки каждого типа сообщений.

Например:

public class SomeHandler : IHandle<SomeMessage>
{
    private readonly IEventAggregator _eventAggregator;

    public SomeHandler(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        _eventAggregator.Subscribe(this);
    }

    public void Handle(SomeMessage message)
    {
        Console.WriteLine("Handled SomeMessage.");
    }
}

Какой термин используется для этого типа программирования? Я хотел бы узнать больше об этом.

Ответы [ 2 ]

4 голосов
/ 15 августа 2011

Он специально основан на классическом шаблоне-посреднике :

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

Ваш конкретный пример кода, похоже, использует Caliburn Micro's EventAggregator .Многие текущие реализации шаблона посредника называются «агрегаторами событий» и являются общими компонентами в библиотеках MVVM Pattern .Это шаблон обмена сообщениями.

С точки зрения шаблонов обмена сообщениями может представлять интерес следующая книга:

Шаблоны корпоративной интеграции: проектирование, создание и развертывание решений для обмена сообщениями

Хотя речь идет больше об использовании обмена сообщениями для системной интеграции, чем об использовании обмена сообщениями для разделения компонентов в приложении.

3 голосов
/ 15 августа 2011

Я бы скорее назвал это паб / подписаться .

Немного более современный подход - использовать инверсию контейнера управления для получения всех подписчиков сообщения.

var subscribers = _container.ResolveAll<ISubscriberOf<IMyMessage>>();
foreach (var subscriber in subscribers)
{
    subscriber.Handle(myMessage);
}

Вы также можете Google " событийно-управляемая архитектура ", чтобы найти более интересные реализации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...