MVC、MVP与MVVM架构模式
MVC(Model View Controller):
View 层是界面,Model 层是业务逻辑,Controller 层用来调度 View 层和 Model 层,
将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果
1、数据关系:
① View 接受用户交互请求
② View 将请求转交给 Controller
③ Controller 操作 Model 进行数据更新
④ 数据更新后,Model 通知 View 更新变化的数据
⑤ View 更新变化的数据
注:前 2 步可以替换成用户直接与 Controller 交互
2、通信方式:单向通信
3、MVC 优点:
① 耦合性低,视图层和业务层分离 ==》 允许更改视图层代码而不用重新编译模型和控制器代码
② 重用性高 ③ 生命周期成本低 ④ 部署快
⑤ MVC 使开发和维护用户接口的技术含量降低
⑥ 可维护性高,分离视图层和业务逻辑层
4、MVC 缺点:
① 不适合中小型规模的应用程序
② 视图与控制器间联系过于紧密
③ 视图对模型数据的低效率访问
5、结构实现:
① View:使用 Composite 模式
② View 和 Controller:使用 Strategy 模式
③ Model 和 View:Observer 模式同步消息
6、模式简明:
① Composite 模式:组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,
使得客户以一致的方式处理单个对象以及对象的组合
② Strategy 模式:Controller是View的一个策略,Controller对于View是可替换的,
View和Controller的关系是一对多,在该模式下,一个类的行为或其算法可以在运行时更改
③ Observer 模式:由两部分组成,被观察的对象和观察者,观察者也被称为监听者;对应到 MVC 中,
Model 是被观察的对象,View 是观察者,Model 层一旦发生变化,View 层即被通知更新
MVP(Model-View-Presenter):
Model 提供数据、View 负责显式、Presenter 负责逻辑处理,与 MVC 一个重大区别是不直接使用 Model
1、数据关系:
① View 接收用户交互请求
② View 将请求转交给 Presenter
③ Presenter 操作 Model 进行数据更新
④ Model 通知 Presenter 数据发生了变化
⑤ Presenter 更新 View 数据
2、通信方式:双向通信
3、MVP 优点:
① 模型与视图完全分离 ==》 可以修改视图而不影响模型
② 可以更高效地使用模型 《== 所有交互都发生在 Presenter 内部
③ 可以将一个 Presenter 用于多个视图而不需要改变 Presenter 的逻辑
④ 便于测试 《== 逻辑都放在 Presenter 中,可脱离用户接口来测试逻辑
4、MVP 缺点:
View 和 Presenter 的交互过于频繁
5、结构实现:
① View:使用 Composite 模式
② View 和 Presenter:使用 Mediator 模式
③ Model 和 Presenter:使用 Command 模式同步信息
6、 模式简明:
① Mediator 模式:定义了一种封装对象之间交互的中介
② Command 模式:所有动作或者行为所需信息被封装到一个对象之内,解耦了发送者与接收者之间的联系
Command 是无状态且惰性的,只有在需要的时候才被创建
MVVM(Model-View-ViewModel):
MVP 模式和 WPF 结合的应用方式发展演变过来的一种新型架构模式
1、数据关系:
① View 接收用户交互请求
② View 将请求转交给 ViewModel
③ ViewModel 操作 Model 数据更新
④ Model 更新完数据,通知 ViewModel 数据发生变化
⑤ ViewModel 更新 View 数据
2、通信方式:双向绑定(View/Model 变化,自动反映在 ViewModel,反之亦然)
3、MVVM 优点:
① 低耦合,View 可独立于 Model 变化和修改,一个 ViewModel 可绑定到不同的 “View” 上,
当 View 变化时 Model 可不变,反之亦然
② 可重用性,可把一些视图逻辑放在一个 ViewModel 里,让多个 View 重用这段视图逻辑
③ 独立开发,不同人员可注重不同的部分
④ 界面素来是比较难于测试的,而现在测试可以针对ViewModel来写
4、MVVM 和 MVP 的区别:
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。
唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。
这样开发者就不用处理接收事件和View更新的工作,框架已经帮你做好了。
MVC、MVP与MVVM架构模式的更多相关文章
- 浅谈MVC、MVP、MVVM架构模式的区别和联系
MVC.MVP.MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用. 一.MVC(Model-View-Controller) MVC是比较直观的架构模式 ...
- MVC、MVP、MVVM架构模式
MVC模式 如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论. MVC模式就是架构模式的一种,不仅适用于 ...
- Android -------- MVC,MVP 和 MVVM 架构设计模式
MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了. 一.MVC MV ...
- MVC MVP 和 MVVM的图示
一直对于这些什么MVC MVP 和 MVVM都是云里雾里的 完全分不清楚 感觉jq上也没怎么用过,理解也很片面,画几张图也许能够大体分清他们之间的区别. 1.MVC(Model-View-Contro ...
- [转载]Android MVC,MVP和MVVM 思想&例子
在Android开发中,常采用 MVC(Model-View-Controller)或者MVP(Model-View-Presenter) 等框架模式.设计如图 mvc mvp 可以看出,在 MV ...
- iOS - MVVM 架构模式
1.MVVM 从字面意思来理解,MVVM 即 Modal View ViewModel(模型 视图 视图模型).MVC 是一个用来组织代码的权威范式,也是构建 iOS App 的标准模式.Apple ...
- 精通MVC网站、MVVM开发模式、Razor语法
http://www.cnblogs.com/powertoolsteam/p/MVC_one.html ASP.NET MVC (一)——深入理解ASP.NET MVC 以下是ASP.NET MVC ...
- 一文解读MVC/MVP/MVVM (转)
这篇文章对目前 GUI 应用中的 MVC.MVP 和 MVVM 架构模式进行详细地介绍. MVC 在整个 GUI 编程领域,MVC 已经拥有将近 50 年的历史了.早在几十年前,Smalltalk-7 ...
- MVC、MVCS、MVVM、MVP、VIPER等这么多架构模式哪一个好呢?
在项目开启阶段,其中一个很重要的环节就是选架构. 那么面对目前已知的这么多架构模式我们该怎么选择呢?这确实是个很让人头疼的问题! 下面我就在这里梳理一下目前常见的一些架构模式. 先逐个对它们的分析 ...
随机推荐
- SMTP email from C#
/// <summary> /// 一人一附件发送邮件 /// 2017-05-17 涂聚文 GeovinDu /// </summary> /// <param nam ...
- Aery的UE4 C++游戏开发之旅(3)蓝图
目录 蓝图 蓝图命名规范 蓝图优化 暴露C++至蓝图 暴露C++类 暴露C++属性 暴露C++函数 暴露C++结构体/枚举 暴露C++接口 蓝图和C++的结合方案 使用继承重写蓝图 使用组合重写蓝图 ...
- EtreCheck是否修复恶意软件和广告软件?为什么EtreCheck无法制作截图?
EtreCheck for Mac是一款Mac上的软件,有很对人对这款软件并不熟系,今天小编就来给大家介绍一下这款软件最常出现的问题—EtreCheck是否修复恶意软件和广告软件?为什么EtreChe ...
- Prometheus学习系列(九)之Prometheus 联盟、迁移
前言 本文来自Prometheus官网手册 和 Prometheus简介 FEDERATION 允许Prometheus服务器从另一台Prometheus服务器抓取选定的时间序列. 一,用例 联盟有不 ...
- CF977D Divide by three, multiply by two
题目链接 我同学在旁边做者道题,我也看了一下 真的好水难 一看这道题,直接搜索 剪枝是不可能剪枝的一辈子不可能 Code #include <cstdio> #include <io ...
- s3c2440裸机-内存控制器(四、SDRAM原理-cpu是如何访问sdram的)
1.SDRAM原理 black (1)SDRAM内部存储结构: (2)再看看与2440连接的SDRAM原理图: sdram引脚说明: A0-A12:地址总线 D0-D15:数据总线(位宽16,2片级联 ...
- atom 在Ubuntu 18.04 上安装及基本使用
前记: Atom 是github专门为程序员推出的一个跨平台文本编辑器.具有简洁和直观的图形用户界面,并有很多有趣的特点:支持CSS,HTML,JavaScript等网页编程语言.它支持宏,自动完成分 ...
- input函数的运用和注意 小知识点
首先先写出代码来 Name=input('请输入你的名字:') print(Name) 终端的显示如下: 请输入你的名字: 与之前的所有的函数有一个巨大的不同点,就是在终端处,我们可以输入任意的内容. ...
- 如何给女朋友讲明白:Java 中 Stack(栈) 与 Heap(堆)
背景 Java 中 Stack(栈) 与 Heap(堆) 是面试中被经常问到的一个话题. 有没有对 Java 中 Stack(栈) 与 Heap(堆) 烂熟于心的童鞋,请举手!!!(怎么没人举手-) ...
- mysql 数据误删恢复
当binlog_format设置为ROW时,想查看binlog中的sql语句时,需要解密,添加这个 --base64-output=decode-rows -v