MVVM Light Toolkit - Messenger使用Event Aggregator或Mediator Pattern?

时间:2014-03-30 18:23:24

标签: c# design-patterns mvvm-light eventaggregator mediator

如果有I/Messenger class (and implementation) MVVM light toolkit来证明Event Aggregator PatternMediator Pattern的使用情况,有人可以帮我解答一下吗?

如果有人提议它部分地遵循这两种模式,那么我会要求详细说明哪个部分的实现类似于保持答案有效的模式。

参考:两个模式之间有一个comparison,这绝对有趣。

1 个答案:

答案 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,因为它有一些通过渠道发送消息的逻辑。