谁能帮我找到I/Messenger class (and implementation)来自 MVVM light toolkit演示 Event Aggregator Pattern 的用法或 Mediator Pattern ?
如果有人建议它部分遵循这两种模式,那么我会要求详细说明实现的哪一部分类似于哪种模式以保持答案有效。
引用:一个comparison在这两种模式之间,这绝对是有趣的。
最佳答案
我认为 Messenger
既不是纯粹的 Event Aggregator
也不是纯粹的 Mediator
。如果我要在其中之一之间进行选择,我会选择 Mediator
。让我们做一些比较。
信使
Messenger 有助于在松散耦合的对象之间发送消息。有兴趣接收消息的消费者可以注册这些消息。生产者可以使用 Messenger 广播消息:
void Register<TMessage>(object recipient, Action<TMessage> action);
void Send<TMessage>(TMessage message);
如果消费者只对通过特定 channel 发送的消息感兴趣,则消费者应在注册时提供 token 。生产者应使用相同的 token 通过该 channel 发送消息:
void Register<TMessage>(object recipient, object token, Action<TMessage> action);
void Send<TMessage>(TMessage message, object token);
这意味着 Messenger 中有一些逻辑可以确定应该将消息发送给哪些订阅者。
事件聚合器
Event Aggregator 的目的就是简单地监听来自很多对象的事件。它也可以用于聚合事件。这意味着事件聚合器从发布者订阅事件,但将他自己的事件发送给订阅者。
中介者
精髓Mediator Pattern是“定义一个对象,它封装了一组对象如何交互”,这意味着中介者不仅从发布者接收消息并将它们发送给订阅者,而且还可以对接收到的消息执行逻辑。
那么呢?
在我看来,Messenger
不是事件聚合器,因为它的目的不是简化事件处理。另一方面,我也不认为它是 Mediator
,因为它的目的不是决定对象如何交互,也不是将逻辑强加给通信。不过,如果让我选择的话,我会说 Messenger 是一个 Mediator,因为它有一点逻辑可以通过 channel 发送消息。
关于c# - MVVM Light Toolkit - Messenger 使用事件聚合器或调解器模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22747954/