1

我有一个与此类似的问题

在开发 WPF 应用程序时,为什么以及在什么情况下应该避免事件(并且首选命令)?我想要一个实际的例子,其中事件方式变得难以遵循/维护(这是我的主要兴趣)。

4

1 回答 1

3

事件实现了发布者和订阅者之间的紧密耦合,格式僵化且难以扩展。最可恶的是,发布者不知道它的订阅者是谁,因此即使所有订阅者都离开了,它也会继续发布。这会导致内存泄漏。

此外,如果 ViewModel 中有处理程序来侦听源自用户界面的事件,则必须以某种方式人为地创建这些事件以在 ViewModel 上运行受控测试。根据您的问题,这可能很难做到。

另一方面,命令仅在 ViewModel 处于可预测状态时执行,并向 CanExecute 查询返回 true。当 CanExecute 查询返回 true 时,可以执行该命令,并且可以准确全面地观察其突变。

在实践中,当开发人员启动应用程序并查找给定条件时,其中包含大量处理程序的 ViewModel 会被测试;使用命令模式的 ViewModel 可以在凌晨 2 点每个人都在家睡觉时进行测试。

您的示例... 用户故事:当我双击列表框中的一个项目,然后在 5 秒内单击“确定”时,应生成对数据库的查询。但前提是今天是星期二,而且只有在曼谷下雨的情况下。

事件模型:难以编程,无法全面测试(除非是星期二:) ),无法扩展,在反复出现错误后,用户对您的工作信心不足。

命令模型:易于编程,易于测试,每次更改需求后可证明 100% 的测试覆盖率。

于 2013-07-10T18:17:21.137 回答