- 2020-07-16
之前有人问我MVVM模式是什么,我心里有一个模糊的理解,但是不知道该怎么描述,然后今天正好查了下MVVM相关的问题,顺便记录一下。
(PS:提到MVVM肯定要说MVC,就放在一起对比一下)
(PPS:只是基础的知识记录一下,进阶的那些等我弄明白再来更)
一、组成部分
(一)、MVC(Model-View-Controller)
- Model:
数据模型,用来存储数据 - View:
视图界面,用来展示UI界面和响应用户交互 - Controller:
控制器(大管家角色),监听模型数据的改变和控制视图行为,处理用户交互
2、MVVM(Model-View-ViewModel)
- Model(模型)
是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心) - View(视图)
就像在MVC和MVP模式中一样,视图是用户在屏幕上看的结构、布局和外观(UI) - View Model(视图模型)
是暴露公共属性和命令的视图的抽象,MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间通信。 - View Controller(绑定器)
声明性数据和命令绑定隐含在MVVM模式中,在Microsoft解决方案中,绑定器是一种名为XAML的标记语言。绑定器使开发人员免于被迫害编写样板式来同步视图模型和视图。在微软的堆之外实现时,声明性数据绑定技术的出现是实现该模式的一个关键因素。
二、MVVM控件
使用MVVM来开发用户控件。由于用户控件在大部分情况下不涉及到数据的持久化,所以如果将M纯粹理解为DomainModel的话,使用MVVM模式来进行自定义控件开发实际上可以省掉M,变成了VVM。
三、MVVM的优点
MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有以下优点:
- 低耦合
视图可以独立于Model变化和修改,一个ViewModel可以绑定到不同的“View”上,当View变化的时候Model可以不变,当Model变化View也可以不变。 - 可重用性
你可以把一些视图逻辑放在一个View Model里面,让很多View重用这段视图逻辑。 - 独立开发
开发人员可以专注于业务逻辑和数据的开发(View Model),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成XAML代码。 - 可测试
界面素来是比较难测试的,测试可以针对View Model来写。