MVVM教程[使用MVVM总结]
国外著名的Jonathan Allen在评论里
提到几点错误使用MVVM的征兆:
1. 你的模型和视图模型名字相同。
视图模型不应该是对模型的包装。视图模型的职责是外部服务的请求中介,比如加载和保存数据。而数据本身,以及验证和大多数业务逻辑应该放在模型里。
我经常强调这点。每当你创建一个视图模型包装一个模型,你就在你的API里引入一个巨大漏洞。具体地,任何直接引用这个模型的东西都可能以视图模型无法察觉的方式改变某个属性,因此UI也不会有相应的改变。同样地,模型里计算字段的任何更改也不会回传给视图模型。
2. 你的视图和视图模型名字相同。
理想的情况下,视图模型是不知道使用它们的视图的,尤其是WPF应用程序有多个窗口共享相同的视图模型。
对于比较小型的应用程序来说,整个应用程序可能只需一个视图模型。对于比较大型的应用程序来说,主要功能可能需要一个视图模型,每个次要方面也需要一个,比如配置管理。
3. 你没有代码隐藏。
代码隐藏既非一个好的东西,亦非一个坏的东西。它只是一个用来放置和视图或控件相关的逻辑的地方。因此,当我看到一个视图没有任何代码隐藏,我就会马上检查是否存在以下问题:
- 视图模型是否通过名字接触了特定的控件?
- 视图模型是否通过命令参数访问控件?
- 是否使用了EventToCommand或其它可以导致泄露的行为而不是简单的事件处理程序?
MVVM Light的EventToCommand很有问题,因为它会使得控件从屏幕移除之后无法被垃圾回收。
4. 视图模型监听属性更改通知
如果一个模型的的生命周期比监听它的事件的视图模型长,那么可能导致内存泄露。不同于视图有个Unloaded事件,视图模型对于生命周期管理没有很好的方案。因此如果它们关联到存活期比它们更长的视图模型的事件,视图模型将会出现泄露。
本文翻译自 .netFramework MVVM http://www.infoq.com/news/2011/12/mvvm-frameworks-net