MVVM设计模式在WPF中的应用
目录
- 概述
- MVVM历史及问题
- 第一个MVVM程序
概述
MVVM,即Model-View-ViewModel,亦即模型-视图-视图模型,是一种当前非常流行的设计模式,其最大特点抑或优点是可将UI与逻辑解耦,不仅实现了开发阶段的任务并行同步(View和model的开发分别同步进行),大大提高了开发效率,也使后期维护难度大大降低,减少相应运维成本。特别在大型项目中这些优点尤为突出。
MVVM模式可用下图来概括:
具体而言:
- View,即视图,顾名思义,就是看得见的软件呈现界面,在WPF中就是用XAML及其关联后台实现的那部分,负责与用户交互,接收用户输入,把数据呈现给用户;
- ViewModel,一个C#通知类,负责收集需要绑定的数据和命令,聚合Model对象,通过View类的DataContext属性绑定到View,同时也可以处理一些UI逻辑;
- Model,就是系统中的对象,可包含属性和行为;
一般来说,View对应一个ViewModel,ViewModel可以聚合n个Model,ViewModel可以对应多个View,而Model不知道View和ViewModel的存在。
MVVM历史及问题
1. MVVM的历史
MVVM是一个相当新的架构,最早于2005年被微软WPF和Silverlight架构师John Gossman提出,并且应用在微软的软件开发中。
MVVM在使用当中,通常还会利用双向绑定技术,使得Model变化时,ViewModel会自动更新,而ViewModel变化时,View也会自动变化。所以,MVVM 模式有些时候又被称作:model-view-binder模式。
2. MVVM的问题
MVVM在实际使用中,确实能够使得Model层和View层解耦,但如果你需要实现MVVM中的双向绑定的话,那么通常就需要引入更多复杂的框架来实现了。对此,MVVM的作者 John Gossman的批评应该是最为中肯的。John Gossman对MVVM的批评主要有两点:
第一、数据绑定使得Bug很难被调试。你看到界面异常了,有可能是你View的代码有Bug,也可能是Model的代码有问题。数据绑定使得一个位置的Bug被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了;
第二、对于过大的项目,数据绑定需要花费更多的内存。
第一个MVVM程序
待续...