基于消息发布的编程?

时间:2011-08-15 18:50:47

标签: c# publish-subscribe eventaggregator

从那时起我就学会了使用事件聚合器来发布消息而不是使用事件我已经设法处理了代码中的大多数事件(减去了将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 个答案:

答案 0 :(得分:4)

它特别基于经典Mediator Pattern

  

使用中介模式,对象之间的通信将使用中介对象进行封装。对象不再直接相互通信,而是通过中介进行通信。这减少了通信对象之间的依赖关系,从而降低了耦合。

您的特定代码示例似乎正在使用Caliburn Micro's EventAggregator。 Mediator Pattern的许多当前实现被称为“Event Aggregators”,并且是MVVM Pattern库中的通用组件。这是一种消息传递模式。

就消息传递模式而言,应该关注以下书籍:

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions

虽然更多的是使用消息传递进行系统集成,而不是使用消息传递来解耦应用程序中的组件。

答案 1 :(得分:3)

我宁愿称之为pub/subscribe

更现代的方法是使用控制容器的反转来获取消息的所有订阅者。

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

你也可以谷歌“event driven architecture”找到更有趣的实现