为什么要避免MVVM中的事件?

时间:2013-07-10 17:28:35

标签: wpf events mvvm command

我对THIS

提出了类似的问题

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

1 个答案:

答案 0 :(得分:3)

事件实现了发布者和订阅者之间的紧密耦合,格式严格且难以扩展。最令人讨厌的是,出版商不知道其订阅者是谁,因此即使所有订阅者都离开了,也会继续发布。这会导致内存泄漏。

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

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

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

您的示例...用户故事:当我双击列表框中的项目,然后在5秒内单击“确定”时,应生成针对数据库的查询。但只有在星期二,只有在曼谷下雨的时候才会这样。

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

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