MVC,MVP,MVVM的比较
来源:互联网 发布:win10安装ubuntu子系统 编辑:程序博客网 时间:2024/05/29 12:27
关于详细内容我就不在此介绍了,有兴趣的朋友可以看下面的连接
MVC,MVP,MVVM的比较
这里我只记下一下本人觉得比较重要的地方。
MVC缺点
在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户 界面,并接受并处理来自用户的操作请求,进而作出响应。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。
MVC->MVP
当我们将Activity复杂的逻辑处理移至另外的一个类(Presenter)中时,Activity其实就是MVP模式中的View,它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类),同时自己也会处理一些简单的逻辑(复杂的逻辑交由 Presenter处理)。
MVP的Presenter是框架的控制者,承担了大量的逻辑操作,而MVC的Controller更多时候承担一种转发的作用。因此在App中引入MVP的原因,是为了将此前在Activty中包含的大量逻辑操作放到控制层中,避免Activity的臃肿
两种模式的主要区别
(最主要区别)View与Model并不直接交互,而是通过与Presenter交互来与Model间接交互。而在MVC中View可以与Model直接交互
通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。而Controller是基于行为的,并且可以被多个View共享,Controller可以负责决定显示哪个View
Presenter与View的交互是通过接口来进行的,更有利于添加单元测试。
MVP的优点如下:
模型与视图完全分离,我们可以修改视图而不影响模型;
2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部;
3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁;
4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。
MVVM
MVVM可以算是MVP的升级版,其中的VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力。
为什么要有MVVM
MVVM 是从 MVP 的进一步发展与规范,MVP 隔离了MVC中的 M 与 V 的直接联系后,靠 Presenter 来中转,所以使用 MVP 时 P 是直接调用 View 的接口来实现对视图的操作的,这个 View 接口的东西一般来说是 showData、showLoading等等。M 与 V已经隔离了,方便测试了,但代码还不够优雅简洁,所以 MVVM 就弥补了这些缺陷。在 MVVM 中就出现的 Data Binding 这个概念,意思就是 View 接口的 showData 这些实现方法可以不写了,通过 Binding 来实现。
- MVC,MVP,MVVM的比较
- MVC,MVP,MVVM设计模式的比较
- android的MVC、MVP、MVVM比较
- MVC、MVP及MVVM的比较
- MVC、MVP和MVVM的比较
- mvc,mvp,mvvm 设计框架的比较和分析
- MVC、MVP、MVVM三种模式的比较
- MVC, MVP, MVVM比较以及区别(上)
- MVC, MVP, MVVM比较以及区别(下)
- MVC, MVP, MVVM比较以及区别-Android
- mvc,mvp,mvvm比较及区别(1)
- mvc,mvp,mvvm比较及区别(2)
- MVC, MVP, MVVM比较以及区别(上)
- mvc mvp mvvm比较以及区别
- MVC, MVP, MVVM比较以及区别
- MVC, MVP, MVVM比较以及区别
- MVC, MVP, MVVM比较以及区别
- MVC,MVP,MVVM的区别
- Android自定义属性,format详解
- Activiti 内容
- Django signals机制的几个简单问题
- 2016-04-13T16:00:00.000Z时间格式转换(时差)
- 我的第四次上机实验4-7之百钱百鸡问题
- MVC,MVP,MVVM的比较
- bzoj 4540: [Hnoi2016]序列
- [Magento SQL] 返回sku,price,specialPrice。排除可配置产品和已下架产品
- php生成器
- cf665a 简单模拟
- 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)
- STL容器的小总结
- OSI模型和TCP/IP网络模型
- Android 异步查询框架AsyncQueryHandler的使用