
MVC、MVP和MVVM之间的区别和联系
发布日期:2021-05-08 01:28:14
浏览次数:14
分类:精选文章
本文共 2444 字,大约阅读时间需要 8 分钟。
一、 MVC模式
- MVC是Model-View-Controller的缩写,它将应用程序划分为三个部分,分别但是Model、View、Controller,模型、视图和控制器,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑
- 三个部分的理解:
Model:程序需要操作的数据和信息,用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法
View:提供给用户的操作界面,是程序的外壳,渲染页面
Controller:接收View层传递过来的指令,选取Model层对应的数据,进行相应的操作,用于控制应用程序的流程,及页面的业务逻辑
-
MVC之间的通信之间是单向的,View层会从Model层拿取数据,View和Model层存在耦合
-
MVC的特点:
- 实现关注点分离,即应用程序中的数据模型与业务和展示逻辑解耦
- View传送指令到Controller
- Controller接收指令完成业务逻辑后,要求Model改变状态
- Model 将新的数据发送到View,用户得到反馈
- MVC的流程:
- 第一种:通过 View 接受指令,传递给 Controller,然后对模型进行修改或者查找底层数据,最后把改动渲染在视图上
- 第二种:通过controller接受指令,传给Controller
- MVC的优点:
- 耦合性低
- 重用性高
- 生命周期成本低
- MVC使开发和维护用户接口的技术含量降低
- 可维护性高
- 部署快
- MVC的缺点:
- 不适合小型、中等规模的应用程序
- 视图和控制器间过于紧密连接
- 视图对模型数据的低效率访问
二、 MVP模式
- MVP是单词Model View Presenter的首字母的缩写,分别表示数据层、视图层、发布层,它是MVC架构的一种演变
- MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向,各部分之间的通信,都是双向的,View 与 Model 不发生联系,都通过 Presenter 传递,V—>P—>M,M—>P—>V
- 在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller
- View层被称之为被动视图,不部署任何业务逻辑,而所有的业务逻辑都部署在Presenter 发布层
- MVP的特点:
- M、V、P之间双向通信
- View 与 Model 不通信,都通过 Presenter 传递,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现
- View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里
- Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用。不仅如此,还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试,从而不需要使用自动化的测试工具
- MVP的优点:
- 模型与视图完全分离,我们可以修改视图而不影响模型
- 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部
- 我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑,这个特性非常的有用,因为视图的变化总是比模型的变化频繁
- 把逻辑放在Presenter中,进行单元测试,脱离用户接口来测试这些逻辑
- MVP的缺点:
视图和Presenter的交互会过于频繁,联系过于紧密,耦合度过高,view变更,presenter也要变更
- MVC和MVP之间的区别:
- 在MVC中,View与Model层直接交互,读取数据,不通过Controller
- 在MVP中,View与Model层不直接交互,而是通过Presenter与Controller进行交互,所有的交互都是发生在Presenter 的内部
三、 MVVM模式
- MVVM是Model、View、ViewModel的简写,MVVM模式其实是MV模式与WPF结合的应用方式时发展演变过来的一种新型架构模式,它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化
- MVVM相比较于MVP,将Presenter变成ViewModel,ViewModel可以理解成是View的数据模型和Presenter的合体
- ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力
- MVVM中的数据可以实现双向绑定,即View层数据变化则ViewModel中的数据也随之变化,反之ViewModel中的数据变化,则View层数据也随之变化
- MVVM模式和MVC模式类似,主要目的是分离视图(View)和模型(Model)
- MVVM的优点:
- 低耦合,视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变
- 可重用性,可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑
- 独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码
- 可测试,界面向来是比较难于测试的,而现在测试可以针对ViewModel来写
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月10日 14时59分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
组合模式
2019-03-06
PyQt5之音乐播放器
2019-03-06
css居中方法与双飞翼布局
2019-03-06
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
2019-03-06
多指灵巧手MoveIt!与Gazebo联合仿真框架搭建
2019-03-06
SQL注入
2019-03-06
XCTF-upload1
2019-03-06
LeetCode 题解 | 1. 两数之和
2019-03-06
#2036:改革春风吹满地
2019-03-06
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2019-03-06
P1379 八数码难题 ( A* 算法 与 IDA_star 算法)
2019-03-06
按需取余
2019-03-06
算法学习笔记: 珂朵莉树
2019-03-06
算法学习笔记:母函数详解
2019-03-06
Codeforces Round #664 题解(A ~ C)
2019-03-06
Problem 1342B - Binary Period (思维)
2019-03-06
Problem A - Sequence with Digits (数学推导)
2019-03-06
Problem 330A - Cakeminator (思维)
2019-03-06
Codeforces Round #674 (Div. 3) (A - F题题解)
2019-03-06
「HDU-2196」Computer (树形DP、树的直径)
2019-03-06