MVVM的优缺点

作者:JohnGossman (MVVM 模式的创始人)

对于我们什么时候和为什么要使用 M-V-VM 与其它模式我思考了很多。一个显然的目的就是在代码隐藏的层面对视图的抽象化,减少大量的业务逻辑或者节外生枝的胶水代码。所有好处都比较抽象,但这里有一个比较具体的优势:ViewModel 比​​代码隐藏或事件驱动的代码更容易进行单元测试。ViewModel,虽然它听起来更像是 View 而不像 Model,而且这意味着你可以方便地测试,而不用去理会麻烦的 UI 动画和交互。如果你曾经尝试过对 UI 代码进行单元测试,你就知道这会有多么困难。

那么它的缺点呢?对于简单的 UI 来讲,M-V-VM 是一种过度的设计。在复杂的情况下,很难预先设计出足够通用的 ViewModel。尽管数据绑定的神奇在于声明式,然而比起命令式的语法,他更难调试,即便你已经在代码中设置了断点(但如果你有很多事件在到处运行,那可能并不会有什么区别)。

数据绑定的性能十分好,但是他会趋向于创建大量的全局的本地数据。就这样运行一段时间,我们就给我们创建的每一个对象都添加了多个绑定。在构建 WPF 程序的时候我们使用了数据绑定,每个对象都几乎耗费了2k的内存…所以这说明用来实现绑定的逻辑比被绑定的对象本身要重得多。在这个例子中,我将全部的绑定替换为静态的回调方法,这一个做法差不多节省了 100MB 的内存…!

一般的 UI 不会创建这么多的绑定,但是性能是我们需要注意的问题。

查看原文