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

Jsi*_*inh 4 c# design-patterns mediator eventaggregator mvvm-light

如果来自MVVM light toolkit的I/Messenger类(和实现)演示了Event Aggregator PatternMediator Pattern的使用,有人可以帮我解决吗?

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

参考:一个比较两个模式,这是绝对有趣之间.

ven*_*rik 14

我认为这Messenger不是纯粹的,Event Aggregator也不是纯粹的Mediator.如果我在其中一个选择之间我会选择Mediator.让我们做一点比较.

信使

Messenger有助于在松散耦合的对象之间发送消息.对接收消息感兴趣的消费者可以注册这些消息.制作人可以使用Messenger来广播消息:

void Register<TMessage>(object recipient, Action<TMessage> action);
void Send<TMessage>(TMessage message);
Run Code Online (Sandbox Code Playgroud)

如果消费者只对通过某个频道的消息感兴趣,则消费者应该在注册时提供令牌.生产者应使用相同的标记通过该通道发送消息:

void Register<TMessage>(object recipient, object token, Action<TMessage> action);
void Send<TMessage>(TMessage message, object token);
Run Code Online (Sandbox Code Playgroud)

这意味着信使在其中具有一些逻辑,用于确定应向哪些订户发送消息.

事件聚合器

Event Aggregator的目的是简单地监听来自许多对象的事件.它也可用于聚合事件.这意味着Event Aggregator订阅来自发布者的事件,但将自己的事件发送给其订阅者.

中间人

Mediator模式的本质是"定义一个封装一组对象如何交互的对象"这意味着Mediator不仅接收来自发布者的消息并将它们发送给订阅者,还可以对接收到的消息执行逻辑.

所以?

在我看来,Messenger它不是Event Aggregator,因为它的目的不是简化处理事件.另一方面,我认为它Mediator不是因为它的目的不是决定对象如何交互,也不是在通信上施加逻辑.如果我在哪里选择,我会说Messenger是一个Mediator,因为它有一点通过渠道发送消息的逻辑.