你Java有MVC,我C#有MVVM(02:MVVM的一个小的成熟的稳定的项目应用)
@TOC
前言
做项目的时候,用到了设计模式,总结下来,供以后参考,与诸君共勉。
MVVM基础介绍【以简单加法计算器为例】,前情回顾
- 使用MVVM之后,界面和逻辑分开之后,界面中是不包含任何逻辑代码的
一、接着上文,这次做一个比较成熟、比较稳定、比较安全的小小小项目,方便自己以后查阅,与诸君共勉
1.首先,咱们接到需求,一般都是UI长啥样,UI中的控件长啥样,每个控件的属性和作用是什么样的…,然后咱们得去进行需求分析、结合组内的资源进行任务优先级、人员、进度等进行详细的安排,然后就是方案的概设详设,然后就是开发…:
- 流程就不细说了,之前的文章里都有,这里还是要多多留心,避免做无用功
- 决定使用MVVM后,就需要结合UI界面,从上到下,仔细对View进行分析,也就是进行ViewModel建模
- 其实这里就需要分析UI中哪些是可以写死的,哪些是动态变化的?
- 一般动态变化的,咱们是不是就可以整上DataBinding啦
- 用我们的软件LCT做分析,从上到下,标题栏中显示的是版本号,那么包括底部的版本号,都需要使用DataBinding来做。【由此可以知道,咱们的软件LCT—->需要预留一块区域来显示软件的基本信息】
- 这是第一块区域
- 第二块区域,我就不按软件的具体开展了,总结一下,基本可以抽象成为一个DataGrid,
- 里面第一列是我们软件可以提供的服务;
- 第二列是软件具体服务的一些属性、种类或者一些分类标志等,可以假想一下咱们微服务中不是老都按照业务功能或者需求对单体项目进行拆分嘛,你拆完不就拆出来几个大类嘛,我们的第二列就是放这些类似的类别
- 也可以按需增加第三列、第四列,形成对第二列的信息扩充
- 最后一列,搞一些勾选框,表示此时有哪些服务被选中
- 第三块区域,就是页面右下角,两部分,第一部分共计:textbox,textbox中的值代表此时选中多少服务,然后紧接着的按钮就是确认按钮或者ok按钮或者next step按钮…
- 这个textbox肯定是属于一个数据属性啦,代表选中多少服务呀
- 点确认按钮或者ok按钮或者next step按钮,存下咱们选中的服务信息
- 综上,总结一下,有几个数据属性,有几个命令属性
- 数据属性:
- 第一个数据属性:最上面一栏的软件介绍,比如版本号,比如软件名称等
- 第二个数据属性:软件的详细信息
- 第三个数据属性:就是第二块区域中的抽象出来的DataGrid
- 第四个数据属性:就是总计后面的值
- 命令属性:
- 第一个命令属性:确认按钮或者ok按钮或者next step按钮
- 第二个命令属性:第二个区域中的勾选框,checkbox
- 数据属性:
- 其实这里就需要分析UI中哪些是可以写死的,哪些是动态变化的?
2.UI元素和数据属性的绑定方式
- UI中的单独元素和命令属性的绑定
- 集合元素中每个元素和命令属性的绑定
3.面向对象的分析办法
- 面向对象的分析方法
- 你要做的这一件事情中,涉及到了哪些类,哪些对象呀
- 这些类、对象中有什么属性、方法呀
- 这些类、对象、属性、方法之间有什么关系呢:继承、组合、多态…
- 分析:
- 关于软件的具体信息,也就是最上面的标题栏的软件版本等信息、以及软件的具体信息,都来源于LctSoftwareInfo这个对象(类)中的一个或多个属性
- 第二块区域抽象出来的DataGrid中的服务,这里就要具体问题具体分析了,看你是根据DataGrid中的东东组成一个对象还是多个对象呢。
- 虽然说,你可以直接把Model中的数据及其字段信息,显示到View中,但是有时候需要对数据进行过滤处理,所以尽量把对数据的中间处理放在ViewModel中,然后将Model中拿来的,在ViewModel处理干净的数据传输到View中进行显示
- 另外,咱们的界面上的第二部分,每一行是一个服务、服务信息、…、服务是否被用户选中,每一个服务应该有自己的ViewModel
- 选中与否,这个布尔值,并不是这个软件对应的服务本身的属性,而是这个服务被用户所操作时所具备的属性,也就是这个选中与否是ViewModel的属性值而不是Model的属性值
二、具体实现:
- 可以使用microsoft.practice.prism.dll,先引入这个库,这个库中有微软现成的NotificationObject及其中关键的RaisePropertyChanged(“isSelected”);方法
- [MVVM基础介绍【自己改的,加了代码的注释】 + 刘老师的饭馆MVVM例子](https://gitee.com/aiminminai/cshape-demo-util-summary/tree/master/MVVM/Version03_mvvm(%E5%BA%94%E7%94%A8%E4%BA%8C%EF%BC%9A%E8%87%AA%E5%B7%B1%E6%94%B9%E7%9A%84+%E5%88%98%E8%80%81%E5%B8%88%E7%9A%84%E9%A5%AD%E9%A6%86%E4%BE%8B%E5%AD%90%E7%A8%8B%E5%BA%8F)
巨人的肩膀
- Head First 设计模式
- 设计模式之禅
- 公众号啦、OSCHINA啦、上面的有关设计模式的文章
- 刘铁猛老师Youtube及B站的教学视频
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.


