c# - MVVM Light Toolkit - Messenger 使用事件聚合器或调解器模式?

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

谁能帮我找到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/

相关文章:

c# - 使用参数在 MVVM Light 中打开新窗口的最佳实践

c# - 在哪里设置 MVC 注册链接过期设置?

c# - SmtpException : The client or server is only configured for e-mail addresses with ASCII local-parts 错误

java - 克隆(通过 Cloneable 接口(interface)或复制构造函数)对象与在原型(prototype)模式中创建新对象的性能

java - 使用备忘录/命令模式快速撤消/重做?

c# - MVVM Light 在需要时创建和处理 View

mvvm - MVVM Light和SL3命令

c# - 如何等待 Azure CloudQueue 被删除?

c# - 为什么 DataInputStream.readline 在字符串开头添加奇怪的字节

java - Facade 模式的最佳实践是什么?