如果有I/Messenger class (and implementation) MVVM light toolkit来证明Event Aggregator Pattern或Mediator Pattern的使用情况,有人可以帮我解答一下吗?
如果有人提议它部分地遵循这两种模式,那么我会要求详细说明哪个部分的实现类似于保持答案有效的模式。
参考:两个模式之间有一个comparison,这绝对有趣。
答案 0 :(得分:14)
我认为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);
这意味着信使中有一些逻辑可以确定应该向哪些订阅者发送消息。
事件聚合器
Event Aggregator的目的是简单地收听来自很多对象的事件。它也可用于聚合事件。这意味着Event Aggregator订阅来自发布者的事件,但将自己的事件发送给其订阅者。
<强>中保强>
Mediator Pattern的本质是“定义一个封装一组对象如何交互的对象”这意味着Mediator不仅接收来自发布者的消息并将它们发送给订阅者,而且可以对收到的消息执行逻辑。消息也是如此。
<强>因此吗
在我看来,Messenger
不是Event Aggregator,因为它的目的不是简化处理事件。另一方面,我认为它不是Mediator
,因为它的目的不是决定对象如何交互,也不是在通信上施加逻辑。如果我在哪里选择,我会说Messenger是一个Mediator,因为它有一些通过渠道发送消息的逻辑。