1
A
回答
3
事件实现了发布者和订阅者之间的紧密耦合,格式严格且难以扩展。最令人沮丧的是,发行商不知道其订阅者是谁,因此即使所有订阅者都去了,也会继续发布。这导致内存泄漏。此外,如果ViewModel在其中有处理程序来侦听源自用户表面的事件,则必须以某种方式人为创建这些事件以在ViewModel上运行受控测试。根据你的问题,这可能很难做到。
另一方面,命令仅在ViewModel处于可预测状态并且返回到CanExecute查询时执行。当CanExecute查询返回true时,可以执行该命令,并且可以精确全面地观察其突变。
实际上,当开发人员启动应用程序并寻找给定条件时,会有一个ViewModel中有大量的处理程序被测试;每个人都睡着的时候,凌晨2点可以测试使用命令模式的ViewModel。
您的示例...用户故事:当我双击列表框中的某个项目,然后在5秒内单击“确定”时,应该生成对数据库的查询。但是,只有在星期二,只有在曼谷下雨的时候。
事件模型:难以编程,不可能全面测试(除非是星期二:)),不可能缩放,重复错误之后,用户对工作的信心不足。命令模型:编程简单,测试简单,在每次更改要求后都可以验证100%的测试覆盖率。
相关问题
- 1. 为什么要避免Application.Worksheetfunction?
- 2. 为什么要逃避和避免XSS
- 3. 为什么要在SQL中避免SELECT *?
- 4. 为什么需要避免complexType?
- 5. 为什么要避免单元测试中的条件逻辑?
- 6. 为什么要避免CDO在.NET中发送邮件?
- 7. 什么是锅炉板码?为什么要避免它?
- 8. 为什么要避免Java中的C++关键字?
- 9. 为什么要避免Java中的biginteger实例化
- 10. 为什么要避免在java中使用Runtime.exec()?
- 11. 为什么要在HRESULT处理中避免宏?
- 12. 为什么要避免使用多字节流在Java中
- 13. 避免FullCalendar中的事件叠加
- 14. 为什么延续避免stackoverflow?
- 15. 为什么建议避免使用.innerHTML?
- 16. 为什么要避免使用“是”和“不是”?
- 17. 当创建ILE RPG程序为什么要默认避免
- 18. 为什么要避免页内<script>
- 19. 为什么要避免后新检查NULL按照ISO C++
- 20. SQLServer:为什么要避免表值用户定义函数?
- 21. 为什么要避免使用i,j in for循环
- 22. 为什么我需要parseInt()来避免NaN?
- 23. 避免回发GridView事件
- 24. 避免写什么到文件
- 25. 我为什么要使用MVVM?
- 26. 为什么要从Unity委托事件中删除事件?
- 27. 在ontextchange事件中避免回传
- 28. 为什么我们要避免编程中的Magic Numbers或Constants并使用宏?
- 29. 为什么要实施productClick事件?
- 30. 为什么我要删除child_added事件?
这与您所引用的问题有何不同?事件只是代码背后 - 这些确切的原因适用。 –
我想要一个例子 –
它不是很难或难以在后面的代码中维护。 MVVM的主要用途是将UI与业务逻辑完全分离,所以如果事件中有一些BL需要执行,那么可以继续使用Commands进行事件。例如,考虑到事件发生时你正在改变'任何控件的背景颜色',那么你可以在代码后面的代码中做到这一点,因为它没有太多的商业逻辑(你仍然可以通过Command实现)。这也取决于你是否真的想单元测试这种情况,然后去命令,否则去代码后面。 – srsyogesh