浅谈MVC、MVP、MVVM
MVC
M: Model 模型——数据 (对于前台而言例如:ajax、jsonp等从后台获取数据的)
V: View 视图——表现层 (Html/css)用户能看见的
C: Controller 控制器——业务逻辑 (先干什么后干什么)
当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上,这就是MVC的工作原理。
缺点:
1.当M或V有一方发生变化,另一方都得变,所以耦合度高。
2.C层会比较臃肿。所以后期衍生了MVP、MVVM框架。
MVP
M: Model 模型——数据 (对于前台而言例如:ajax、jsonp等从后台获取数据的)
V: View 视图——表现层 (Html/css)用户能看见的
P: Presenter
从图中就可以看出,最明显的差别就是view层和model层不再相互可知,完全的解耦,取而代之的presenter层充当了桥梁的作用,用于操作view层发出的事件传递到presenter层中,presenter层去操作model层,并且将数据返回给view层,整个过程中view层和model层完全没有联系。看到这里大家可能会问,虽然view层和model层解耦了,但是view层和presenter层不是耦合在一起了吗?其实不是的,对于view层和presenter层的通信,我们是可以通过接口实现的,具体的意思就是说我们的activity,fragment可以去实现实现定义好的接口,而在对应的presenter中通过接口调用方法。不仅如此,我们还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试。这就解决了MVC模式中测试,维护难的问题。
优点:M和V没有耦合。
缺点:P更加臃肿。
MVVM:一部分简单逻辑放到HTML中。
M: Model 模型——数据 (对于前台而言例如:ajax、jsonp等从后台获取数据的)
V: View 视图——表现层 (Html/css)用户能看见的
VM: ViewModel 视图+数据
如果上图不是很明了,下面这个更清晰些。
优点:
1.M和V没有耦合。
2.VM也没那么臃肿了。
相关文章:
设计框架(MVC、MVP、MVVM、VIPER)的演化说明总结
MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
浅谈MVC、MVP、MVVM的更多相关文章
- 浅谈MVC MVP MVVM
复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用. 它本身很容易理解,但是要讲清楚,它与衍生的 MVP ...
- 浅谈MVC、MVVM的区别
一.概述 MVC,MVP,MVVM是三种常见的前端架构模式(Architectural Pattern),它通过分离关注点来改进代码组织方式.不同于设计模式(Design Pattern),只是为了解 ...
- 浅谈MVC和MVVM模式
MVC I’m dating with a model… and a view, and a controller. 众所周知,MVC 是开发客户端最经典的设计模式,iOS 开发也不例外,但是 MVC ...
- MVC, MVP, MVVM比较以及区别(上)
MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...
- MVC, MVP, MVVM比较以及区别
MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...
- android MVC && MVP && MVVM分析和对比
相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...
- [1] MVC & MVP &MVVM
开发架构之MVC & MVP & MVVM
- 浅析前端开发中的 MVC/MVP/MVVM 模式
MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...
- 浅谈 MVC 和 MTV
浅谈 MVC 和 MTV 一.MVC M:model,模型,就是数据模型,负责数据的存取: V:view,视图,负责页面的展示逻辑: C:controller,控制器,负责业务逻辑的处理: 二.MTV ...
随机推荐
- CentOS 7.0关闭默认防火墙启用iptables防火墙
转自:https://www.cnblogs.com/lixuwu/p/6087023.html 阅读目录 1 配置防火墙,开启80端口.3306端口 2 关闭SELINUX 3 CentOS 配置防 ...
- App架构师实践指南四之性能优化一
App架构师实践指南四之性能优化一 1.性能维度常见用来衡量App性能的维度如图9-1所示.其中,性能指标包括电池(电量/温度).流量(上行流量/下行流量等).CPU(平均/最大/最小).内存 ...
- 04-树5 Root of AVL Tree + AVL树操作集
平衡二叉树-课程视频 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the tw ...
- java 查看线程的信息
的代码上加上 断点 运行 进入Terminal jps 查看进程号 jstack 进程号 查看线程的信息 jstack pid 此时进去DEBUG 端F9 跑完程序 再回到Terminal 中 就能 ...
- 生成springboot docker镜像 并上传到阿里云镜像厂库
1 mvn package 2 创建Dockerfile ----------------------------------------------------------------------- ...
- MDX Cookbook 08 - 基于集合上的迭代递归
递归的应用有时是非常重要的,特别在迭代一个集合的时候.为什么这么说呢?原因在于迭代在MDX中的使用是基于集合函数的,像 GENERATE() 它们都需要遍历整个集合.但是如果这个集合非常的庞大,我们仅 ...
- 按装 autoconf 出现 需要安装m4-1.4.16.tar.gz的错误
root@suzgc # /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config - ...
- 基于Ubuntu部署 memcached 服务
系统要求:Ubuntu 16.04.1 LTS 64 位操作系统 安装并启动 memcached 服务 安装 memcached 使用apt-get安装 memcached sudo apt-get ...
- Windows 8系统默认开启的.Net Framework版本是4.0,而部分用户可能需要使用到3.5或以下版本,简单添加方法
从网络途径下载的.Net Framework3.5是无法直接在Windows 8系统上安装的,我们可以通过Windows 8的添加功能来实现 1.打开控制面板,点击”启用或关闭Windows 功能“ ...
- Android 得到照片位置信息
目前Android SDK定义的Tag有:TAG_DATETIME 时间日期TAG_FLASH 闪光灯TAG_GPS_LATITUDE 纬度TAG_GPS_LATITUDE_REF 纬 ...