ViewModel 设计模式

http://msdn.microsoft.com/zh-cn/magazine/dd419663.aspx

http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx

05年的文章,简单翻译,很烂见谅

MVVM是MVC的变种,为UI设计师提供便捷,远离纯粹的编码。设计师是图形化更艺术化的人,更喜欢用所见即所得的方式。简而言之,程序的UI部分需要
其他人用其他的工具和语言生成,而不同于后台业务逻辑和数据。MVVM是对起源于Smalltalk这样的整个应用程序使用一种语言的MVC设计模式的改
进,以适应现在的复杂灵活的Web开发环境的需求。

Model.View/ViewModel还提出了数据绑定的概念,之后会介绍。

Model还和MVC中的一样,表示业务模型和数据,独立于UI,用于解决主要问题。Model用代码或者纯数据描述

View包括可视化组件,按钮,窗口,图形和混合组件,它包括快捷键以及组件自己的交互操作。UI通常是用工具生成或者是描述性的语言描述的,MVC模式
中View的多种状态不容易表现,如编辑模式查看模式,不同模式下组件的行为交互是不同的,这些模式不能总定义在XAML中,我们将解决这个问题。
这时候数据绑定出现了,举例,View是Model数据的绑定,一些Model只是简单的查看,之需要单向绑定,其他需要双向绑定,如一个Boolean
值可以绑定的CheckBox中也可以与一个TextBox绑定。
实际上,只有少数的应用程序中View是能直接与Model绑定的,尤其是如果这个这个Model是已经存在的类或者数据结构,而且他已经在其他应用程序
中多处使用,这个Model可能有数据类型但没法直接与组件关联。UI可能需要复杂的转换,这些代码既不能算是View,也不完全属于Model,最后我
们还需要给选中模型,模式给个合适的位置。
ViewModel的提出就是因为这些原因,这个术语可以被认为是View的抽象,也可以理解为专用于View数据绑定的特殊模型,ViewModel包
括数据从Model类型到View类型的转换,也包括视图命令和交互。
我将以这种思想,在以后的文章中详细描述数据绑定视图命令行与ViewModel,这里先用些例子快速的理解这种模式。

上图中显示了Sparkle
UI中的三个编辑面板,都是使用的MVVM的设计模式,上面的是一个组件库面板,Model是一堆assemblies,每个assembly又有一堆
controls,View是一个ComboBox和一个ListBox,ComboBox直接绑定assembly集合,显示assembly的名
称,ListBox绑定其下的子项。这里的ViewModel包括当前选中的Assembly和插入组件到场景中的命名行。选中模型是ViewModel
中常用的一部分,,但是当组件被选中,你可能会疑惑为什么不让View自己控制选中模型,这是因为通常多个组件需要同步选中,在ViewModel中简单
的绑定选中模型,就可以以很容易同步给多个View,在这个组件库面板中,选中的Assembly决定了ComboBox选中的Assembly,也决定
了ListBox中的数据。此外,界面设计者可以改用ListBox呈现Assemblies,用ComboBox呈现组件集合,而不需要修改选中同步代
码。
视图面板也有自己的模型(编辑区域中的选中图形和组件),View包括一个ListBox(用于显示选中组件的相关属性),控制画笔的按钮,渐变按钮,颜
色拾取组件,以及设置画笔的命令行。


+ 五 = 6