MVVM Light Toolkit - Messenger 使用事件聚合器还是中介器模式?

2023-11-27

有人可以帮我看看是否I/Messenger 类(和实现) from MVVM轻工具包演示了使用事件聚合器模式 or 中介者模式?

如果有人建议它部分遵循这两种模式,那么我会请求详细信息,说明实现的哪一部分类似于哪种模式以保持答案有效。

Ref: One 比较在这两种模式之间,这绝对是有趣的。


我觉得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);

这意味着信使中有一些逻辑来确定应将消息发送给哪些订阅者。

事件聚合器

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

Mediator

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

So?

在我看来Messenger不是事件聚合器,因为它的目的不是简化事件处理。另一方面,我不认为这是一个Mediator要么是因为它的目的不是决定对象如何交互,也不是在通信上强加逻辑。如果我选择在哪里,我会说 Messenger 是一个中介者,因为它有一些通过通道发送消息的逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVVM Light Toolkit - Messenger 使用事件聚合器还是中介器模式? 的相关文章

随机推荐

  • MvcMailer 单元测试:System.ArgumentNullException httpContext 不能为 null

    我无法使用 Visual Studio 测试套件和 Moq 成功运行 MvcMailer 的单元测试 我已经从 wiki 逐字复制了示例 但每次都会出现以下异常 Test method MvcMailerTest Tests MailerT
  • 使用 Visual Studio 2013 RC 在 Windows 8.1 RTM 上安装 Windows Phone 7.1 SDK

    有谁知道如何在 Windows 8 1 RTM 上使用 Visual Studio 2013 因此无需安装 Visual Studio 2010 进行 Windows Phone 7 开发 我在安装 Visual Studio 2013 时
  • 为什么负 z 索引会消除非静态定位元素的悬停功能?

    我刚刚注意到这个设置z index 1非静态定位的元素会删除它们的悬停功能 令人惊讶的是 绝对和固定定位元素的悬停能力随条件而变化 仅当绝对 固定定位的元素后 面写有一些文本时 才会部分失去悬停功能 将鼠标悬停在顶部边框附近不起作用 如果它
  • SQL try-catch 语句不处理错误 (SQL Server 2008)

    我正在尝试使用 try catch 捕获 SQL 查询 而不是存储过程 中的错误 由于某种原因 这没有处理我的错误 但我仍然得到 消息 213 第 16 级 状态 1 第 29 行 列名称或提供的值的数量与表定义不匹配 有什么帮助吗 beg
  • 捕获最小化远程桌面的屏幕截图

    我有以下 C 代码 用于捕获远程桌面 RDP 会话内的屏幕截图 当会话处于活动状态时 它工作正常 但如果我最小化会话 则会因无效句柄异常而失败 有什么方法可以实现此功能 或者当会话最小化时屏幕基本上 消失 了 string filename
  • strtotime('上个月的第一天') 的版本差异?

    在包含以下内容的脚本中 date Y m d strtotime first day of last month 在版本 5 3 10 localhost 中 我得到 例如 2012 03 01 在版本 5 2 17 远程主机 中 我得到
  • 如何自动停止VBA宏?

    I know you can manually stop a running VBA macro with Ctrl Break but is there any way to have the code stop automaticall
  • 安装 HAXM 时不支持 VT

    我正在尝试安装使用 Intel x86 模拟器加速器的快速 Android 模拟器 我已经通过 SDK 管理器下载了加速器 但是当我尝试安装它时 我在安装开始时收到以下错误消息 我知道我的 CPU i7 3520M 支持 VT X 虚拟化
  • macOS 上 SwiftUI 中列表内的 TextField:编辑效果不佳

    这个问题是关于 SwiftUI 的macOS应用程序 不是 iOS 或 Catalyst 使用 Xcode 12 4 SwiftUI 2 问题是 编辑列表内的文本字段效果不佳 事实上 它的效果非常差 以至于一开始我以为我根本无法编辑它 这是
  • sqlite3“操作错误:接近”(“:语法错误”python

    简而言之 我正在尝试创建一个 sql 数据库表并向其中输入数据 我让它以更简单的方式工作 但是当我将它放入我的脚本中时 它会导致此错误 我希望这是我错过的一些简单的事情 任何帮助 建议将不胜感激 conn sqlite3 connect D
  • Angularjs - 装饰控制器

    我正在尝试为我的控制器设置一个装饰器 我的目的是在我的应用程序中的所有控制器中引入一些常见的行为 我已将其配置为在 Angular 1 2 x 中工作 但从 1 3 x 开始有一些重大更改破坏了代码 现在得到的错误是 控制器不是一个函数 下
  • 类型参数“T”不受 impl 特征、自身类型或谓词的约束

    当特征具有相关类型时 我很难理解特征的使用 这是一个非常简单的例子 pub trait Message pub trait SendsMessages type Message Message fn send msg Self Messag
  • 如何在 Moose 中使用单个构建器构建多个属性?

    使用 Moose 是否可以创建一个同时构建多个属性的构建器 我有一个项目 其中对象有多个字段 集 如果请求该集中的任何成员 我想继续填充它们 我的假设是 如果我需要姓名 我还需要生日 并且由于它们位于同一个表中 因此在一个查询中获取两者会更
  • 基类指针可以指向派生类对象。为什么反之则不然呢?

    基类指针可以指向派生类对象 为什么不进行强制转换则反之亦然 从逻辑上讲 基类不会有足够的派生类信息 但派生类也应该有基类的信息 我在这里缺少一些基础知识 如果我告诉你我有一只狗 你就可以放心地假设我有一只宠物 如果我告诉你我有一只宠物 你不
  • Sql批量插入--文件不存在

    我有以下查询要插入表中 BULK INSERT tblMain FROM c Type txt WITH FIELDTERMINATOR ROWTERMINATOR n GO 它收到消息 消息 4860 16 级 状态 1 第 1 行无法批
  • 在运行时动态选择要使用的 .dll 版本

    我正在开发一个 SharePoint 实用程序 该应用程序适用于 SharePoint 2007 和 2010 当我引用 12 0 0 0 版本的 SharePoint dll 时 该应用程序适用于 SharePoint 2007 但不适用
  • TFS 2012 + Visual studio 2012:某些设置选项返回“用户名或密码不正确”

    我已将 TFS 2010 升级到 TFS 2012 没有出现任何问题 我可以连接到源代码管理 签入以及工作所需的一切 但是 如果我转到我所连接的团队项目的设置页面 则会出现以下选项work正如预期 团队项目 源代码控制 团队项目 门 户设置
  • 如何从列表中删除元素?

    我有一个列表 我想从中删除一个元素 我怎样才能做到这一点 我尝试在参考手册中查找我认为该函数的明显名称 但没有找到合适的名称 Answer recommended by R Language Collective 如果您不想就地修改列表 例
  • 使用 Chromedriver 制作程序,出现错误:“无法使用此命令获取 Chrome 版本”

    这是我的代码 我这样做是因为当我尝试输入 chromedriver exe 的路径时 我要么收到 WebDriverException 消息 chromedriver exe 可执行文件可能有错误的权限 或 WebDriverExcepti
  • MVVM Light Toolkit - Messenger 使用事件聚合器还是中介器模式?

    有人可以帮我看看是否I Messenger 类 和实现 from MVVM轻工具包演示了使用事件聚合器模式 or 中介者模式 如果有人建议它部分遵循这两种模式 那么我会请求详细信息 说明实现的哪一部分类似于哪种模式以保持答案有效 Ref O