2013-07-10 23 views
1

我有类似的问题THIS为什么要避免MVVM中的事件?

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

+0

这与您所引用的问题有何不同?事件只是代码背后 - 这些确切的原因适用。 –

+0

我想要一个例子 –

+0

它不是很难或难以在后面的代码中维护。 MVVM的主要用途是将UI与业务逻辑完全分离,所以如果事件中有一些BL需要执行,那么可以继续使用Commands进行事件。例如,考虑到事件发生时你正在改变'任何控件的背景颜色',那么你可以在代码后面的代码中做到这一点,因为它没有太多的商业逻辑(你仍然可以通过Command实现)。这也取决于你是否真的想单元测试这种情况,然后去命令,否则去代码后面。 – srsyogesh

回答

3

事件实现了发布者和订阅者之间的紧密耦合,格式严格且难以扩展。最令人沮丧的是,发行商不知道其订阅者是谁,因此即使所有订阅者都去了,也会继续发布。这导致内存泄漏。此外,如果ViewModel在其中有处理程序来侦听源自用户表面的事件,则必须以某种方式人为创建这些事件以在ViewModel上运行受控测试。根据你的问题,这可能很难做到。

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

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

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

事件模型:难以编程,不可能全面测试(除非是星期二:)),不可能缩放,重复错误之后,用户对工作的信心不足。命令模型:编程简单,测试简单,在每次更改要求后都可以验证100%的测试覆盖率。