Jsi*_*inh 4 c# design-patterns mediator eventaggregator mvvm-light
如果来自MVVM light toolkit的I/Messenger类(和实现)演示了Event Aggregator Pattern或Mediator 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,因为它有一点通过渠道发送消息的逻辑.