用OOA方法分析MVVM.doc
上传人:sy****28 上传时间:2024-09-15 格式:DOC 页数:3 大小:49KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

用OOA方法分析MVVM.doc

用OOA方法分析MVVM.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

用OOA方法分析MVVM在OOA方法分析之前,假设我们对MVVM从来都不了解,但是我们需要一种技术,解决UI编程让界面编程与数据编程进行分离,这样开发界面的人员专心界面技术的研究,数据编程的人员专心业务逻辑的实现。这也就是对MVVM的需求。什么是MVVM根据数据和界面分离的技术需求,我们可以得到图(1)的用例。在用例中有对数据操图(1)作和对界面操作的两个角色。数据流向是,当操作数据的角色对数据进行增删改时,立刻在界面上有所反映;当界面操作人员在界面上做修改时,数据操作方也能被告知。有了这些信息我们就可以把整个用例当作一个对象(对象是某事物属性和行为的集合)来描述。MVVM的属性是数据和界面,行为是对数据的操作和对界面的操作。然而,我们知道界面是对数据的一种表现方式,数据是原子的,界面与数据是一种一对多的关系,可以在MVVM中增加一个描述界面数据关系的属性。现在我们来对MVVM三个属性进行概念抽象,就是数据模型、界面视图和视图模型,用英文表示model、view和view-model,他的缩写就是MVVM。用例细化得到了图(2)的结构。图(2)MVVM的实现接下来我们对Model、View和View-Model进行分析,这三个对象结构还是比较简单的,Model的属性就是我们要定义的数据项,行为变更的通知动作;View的属性是界面元素,行为也一个变更的通知动作;View-Model属性是Model对象,行为根据功能实现确定。有兴趣的自己可以画画用例。MVVM的实现流程是创建Model、View和View-Model三个对象模型,然后实现他们的调用关系。很抽象的一句话,不懂没关系,读懂下面的例子就可以了,但OOA分析就到此结束了。多说一句,OOA的核心思想就是分析边界,属性也好,行为也好都与边界有关。MVVM就是为WPF而生的,下面以WPF的UI开发为例,对WinFrom、java什么的就留给各位看客研究,但记住MVVM是C/S的,B/S可是MVC。下面以对人的姓名和年龄UI编程为例。Model、View和View-Model的定义是很简单的,看代码就明白,代码中颜色部分下面有解释。1、Model的定义代码:classPersonModel:INotifyPropertyChanged{privatestringfirstName;publicstringFirstName{get{returnfirstName;}set{firstName=value;OnPropertyChanged("FirstName");}}privateintage;publicintAge{get{returnage;}set{age=value;OnPropertyChanged("Age");}}publiceventPropertyChangedEventHandlerPropertyChanged;privatevoidOnPropertyChanged(stringpropertyName){if(PropertyChanged!=null)PropertyChanged(this,newPropertyChangedEventArgs(propertyName));}}黄色部分的代码就是PersonModel通知行为的实现,只不过利用了.netFramework的通知功能,这段代码是可以被复制使用的,弄清原理需要分析.netFramework,可以告诉你的是,它就是面向驱动编程的实现。单对象模型的定义比较简单吧。数据列表就得实现HYPERLINK"http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://WindowsBase:3.0.0.0:31bf3856ad364e35/System.Collections.Specialized.INotifyCollectionChanged"\o"System.Collections.Specialized.INotifyCollectionChanged"INotifyCollectionChanged,实现过程还是比较复杂的。只是为了应用的话,推荐你定义列表数据对象时继承HYPERLINK"http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://WindowsBase:3.0.0.0:31bf3856ad364e35/System.Collections.ObjectModel.ObservableCollection%3c%3e"ObservableColle