0

自从了解了使用事件聚合器发布消息而不是使用事件之后,我已经设法处理了我的代码中的大多数事件(减去那些将 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.");
    }
}

这种类型的编程使用什么术语?我想了解更多。

4

2 回答 2

4

它专门基于经典的中介者模式

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

您的特定代码示例似乎正在使用Caliburn Micro 的 EventAggregator。中介者模式的许多当前实现被称为“事件聚合器”,并且是MVVM 模式库中的常见组件。这是一种消息传递模式。

就消息传递模式而言,应该对以下书籍感兴趣:

企业集成模式:设计、构建和部署消息传递解决方案

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

于 2011-08-15T19:01:09.857 回答
3

我宁愿称它为pub/subscribe

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

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

你也可以谷歌“事件驱动架构”找到更多有趣的实现

于 2011-08-15T19:21:09.797 回答