Android的MVC MVP MVVM模式

简介: 学习Android的同学一定要了解的三种开发模式,不然自己写的项目采用的什么模式都不清楚

MVC,MVP,MVVM都是为了解决UI页面与逻辑代码分离而出现的模式,MVP和MVVM都是MVC的基础上演化而来


MVC:

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写


M——模型层(Model)负责处理数据的加载或者存储


V——视图层(View)负责界面数据的展示,与用户进行交互


C——控制器层(Controller)负责逻辑业务的处理



MVC关系图

在MVC模式中,View层可以直接访问Model层和Controller层,所以View层包含Model层信息和Controller层的业务逻辑处理


在MVC模式中,Model层不依赖View层,但是View层依赖Model层,导致更改View层比较困难


优点:


耦合性低,生命周期成本低,部署快,可维护性高,适用于快速开发的小型项目


缺点:


不适合大型,中等项目,View层Controller层连接过于紧密


View层对Model层的访问效率低


一般的高级UI页面工具和构造器不支持MVC模式


注意:


Activity和Fragment既有View的性质,又具有Controller的性质,导致Acyivity和Fragment很重


MVC中View层与Model层直接交互,所以Activity和Fragment与Model的耦合性很高


MVP:

MVC全名是Model View Controller,是模型(mV----odel)-视图(view)-控制器(controller)的缩写


M——数据层(Model)负责对数据的存取操作,例如对数据库的读写,网络的数据的请求等


V——视图层(View)负责对数据的展示,提供友好的界面与用户进行交互,Android通常将Activity或者Fragment作为View层


C——控制器层(Controller)连接View层与Model层的桥梁并对业务逻辑进行处理



MVP关系图

MVP模式将MVC中的Controller换成Presenter,同时改变了通信方向。

View与Model隔离,Presenter负责完成View层与Model层的交互。


MVP执行流程:


View层收到用户的操作

View层把用户的操作交给Presenter

Presenter直接操作Model层进行业务逻辑处理

Model层处理完毕后,通知Presenter

Presenter收到通知后,去更新View层

在MVP模式中,Model与View无法直接进行交互,所以Presenter层会从Model层获得数据,适当处理后交给View层进行显示


在MVP模式中,Presenter层将View层和Model层进行隔离,使View和Model之间不存在耦合,同时将业务逻辑从View层剥离


优点:


模型与视图完全分离,修改View而不Model


可以更高效的使用Model,所有的交互都发生在——Presenter内部


将一个Presenter用于多个视图,而不需要改变Presenter的逻辑,View变化比Model变化频繁


逻辑结构清晰,View层代码不再臃肿


缺点:


MVP模式基于接口设计,会增加很多类,代码逻辑虽然清晰,但代码量庞大


MVP适用于中小型项目,大型项目慎用


MVC和MVP的主要区别:


MVP中View与Model并不直接交互,而是通过与Presenter交互来与Model间接交互

MVP中Controller是基于行为的,并且可以被多个View共享,Controller可以负责决定显示哪个View

MVP中Presenter与View的交互是通过接口来进行的,更有利于添加单元测试。

MVC中View可以与Model直接交互,通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑

注意:


MVP中将这三层分别抽象到各自的接口当中,通过接口将层次之间进行隔离


Presenter对View和Model的相互依赖也是依赖于各自的接口,符合了接口隔离原则


Presenter层中包含了一个View接口,并且依赖于Model接口,从而将Model层与View层联系在一起


View层会持有一个Presenter成员变量并且只保留对Presenter接口的调用,具体业务逻辑全部交由Presenter接口实现类中处理。


MVVM:

MVVM 即 Model-View-ViewModel


M——Model(模型)实体模型,定义实体类,获取业务数据模型,如通过数据库或者网络来操作数据等


V——View(视图)布局文件(XML),主要进行控件的初始化设置


VM——ViewModel(控制器):连接 View 与 Model 的中间桥梁,ViewModel 与 Model 直接交互,通过DataBinding将数据变化反应给View




注:ViewModel可以理解为View与Presenter的合成体


优点:


结构清晰,职责划分清晰

模块间充分解耦

在 MVP 的基础上,MVVM 把 View 和 ViewModel 也进行了解耦

低耦合

       MVVM 模式中,数据处理逻辑是独立于 UI 层的


       ViewModel 只负责提供数据和处理数据,不会持有 View 层的引用


       View 层只负责对数据变化的监听,不会处理任何跟数据相关的逻辑


       View 层的 UI 发生变化时,也不需要像 MVP 模式那样修改对应接口和方法实现,一般情况下ViewModel 不需要做太多的改动


数据驱动

       UI 的展现是依赖于数据的,数据的变化会自然的引发 UI 的变化,而 UI 的改变也会使数据 Model 进行对应的更新


       ViewModel 只需要处理数据,而 View 层只需要监听并使用数据进行 UI 更新


异步线程更新Model

       Model 数据可以在异步线程中发生变化,此时调用者不需要做额外的处理


       数据绑定框架会将异步线程中数据的变化通知到 UI 线程中交给 View去更新


方便协作

       View 层和逻辑层几乎没有耦合,在团队协作的过程中,可以一个人负责 UI,一个人负责数据处理。并行开发,保证开发进度


易于单元测试

      ViewModel 层只负责处理数据,在进行单元测试时,测试不需要构造一个 fragment/Activity/TextView 等来进行数据层的测试


      View 层也一样,只需要输入指定格式的数据即可进行测试,而且两者相互独立,不会互相影响


数据复用

      ViewModel 层对数据的获取和处理逻辑,尤其是使用 Repository 模式时,获取数据的逻辑完全是可以复用的


      开发者可以在不同的模块,多次方便的获取同一份来源的数据


      同样的一份数据,在版本功能迭代时,逻辑层不需要改变,只需要改变 View 层即可


目录
相关文章
|
15天前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
51 2
|
15天前
|
存储 前端开发 Java
Android MVVM架构模式下如何避免内存泄漏
Android采用MVVM架构开发项目,如何避免内存泄漏风险?怎样避免内存泄漏?
50 1
|
2月前
|
设计模式 Android开发 Kotlin
Android经典实战之Kotlin委托模式和by关键字
本文介绍了Kotlin中`by`关键字在类及属性委托中的运用,通过实例展示了如何利用类委托简化接口实现,以及如何借助标准与自定义属性委托管理属性的读写操作。通过`by`关键字的支持,Kotlin使得委托模式的实现更为直观且高效。
59 4
|
15天前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
13 2
|
2月前
|
存储 前端开发 Java
Android MVVM框架详解与应用
在Android开发中,随着应用复杂度的增加,如何有效地组织和管理代码成为了一个重要的问题。MVVM(Model-View-ViewModel)架构模式因其清晰的结构和高效的开发效率,逐渐成为Android开发者们青睐的架构模式之一。本文将详细介绍Android MVVM框架的基本概念、优势、实现流程以及一个实际案例。
|
3月前
|
存储 前端开发 测试技术
Android Kotlin中使用 LiveData、ViewModel快速实现MVVM模式
使用Kotlin实现MVVM模式是Android开发的现代实践。该模式分离UI和业务逻辑,借助LiveData、ViewModel和DataBinding增强代码可维护性。步骤包括创建Model层处理数据,ViewModel层作为数据桥梁,以及View层展示UI。添加相关依赖后,Model类存储数据,ViewModel类通过LiveData管理变化,而View层使用DataBinding实时更新UI。这种架构提升代码可测试性和模块化。
165 2
|
5月前
|
XML 前端开发 测试技术
Android基础知识:解释Android的MVC和MVP模式。
Android基础知识:解释Android的MVC和MVP模式。
60 0
|
设计模式 XML 存储
Android实战 | 详解MVC、MVP模式并分别实现登录界面案例
Android实战 | 详解MVC、MVP模式并分别实现登录界面案例
|
Android开发 数据格式 JSON
【Android架构】基于MVP模式的Retrofit2+RXjava封装之常见问题(四)
先回顾下之前的 【Android架构】基于MVP模式的Retrofit2+RXjava封装(一)【Android架构】基于MVP模式的Retrofit2+RXjava封装之文件下载(二)【Android架构】基于MVP模式的Retrofit2+RXjava封装之文件上传(三) 今天要说的是使用Retrofit2和Okhttp 过程中遇到的一些问题。
1082 0