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

MVVM关系图

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

优点:

  1. 结构清晰,职责划分清晰
  2. 模块间充分解耦
  3. 在 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 层即可

  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: MVCMVPMVVM 是三种设计模式,用于在 Android 应用程序中组织代码。 MVC(模型-视图-控制器):模型存储应用程序数据,视图显示数据,控制器处理用户交互。 MVP(模型-视图-presenter):与 MVC 类似,但 presenter 更加紧密地与视图绑定,负责更新视图。 MVVM(模型-视图-视图模型):与 MVP 类似,但视图模型与视图绑定,负责将数据转换为视图可用的形式。 三者的差异在于MVC会产生视图和模型之间的耦合,MVPMVVM是将视图和模型之间的耦合分离,更加灵活。 ### 回答2: Android开发中,MVCMVPMVVM都是常见的架构模式,用来组织Android应用的代码结构,让代码更加规范、易于维护。 MVC(Model-View-Controller)是最早的一种架构模式,它将应用分为三个模块:模型(Model)、视图(View)和控制器(Controller)。其中模型负责数据的存储和操作,视图负责显示界面,控制器则负责对用户输入进行响应,协调模型和视图之间的关系。MVC模式的优点是结构清晰,各个模块职责分明,易于实现代码复用,因此广泛应用。但是MVC模式也有一些缺点,比如控制器中很难进行单元测试,代码复杂度较高,难以维护大型项目等问题。 MVP(Model-View-Presenter)是一种基于MVC模式的改进,它将模型和视图分离,通过在中间加上Presenter来连接两者。Presenter接受用户的输入,并根据视图的状态更新数据模型,然后更新视图显示。MVP模式的优点是易于单元测试,将业务逻辑和界面分离,代码复杂度较低,易于维护。但是对于大型项目,Presenter层也会变得庞大且复杂。 MVVM(Model-View-ViewModel)是一种结合数据绑定和命令模式的前端设计模式,它将模型、视图和ViewModel分开,通过数据绑定将视图和ViewModel联系起来。ViewModel封装了视图的状态和行为,当ViewModel被修改时,视图会自动更新。MVVM模式的优点是将视图和ViewModel解耦,通过数据绑定自动更新视图,提高了代码的可重用性。但MVVM模式需要使用大量的数据绑定,可能导致系统卡顿,同时实现较为复杂。 总的来说,MVCMVPMVVM这三种模式都有各自的适用场景。在小型项目中,可以使用MVC模式;在中型项目中,可以使用MVP模式;在大型项目中,可以使用MVVM模式。选择合适的架构模式能够让代码更易于维护,提高开发效率。 ### 回答3: Android是一种以Java为基础的开源操作系统,广泛应用于移动设备中。在开发Android应用程序时,常用的三种架构模式MVCMVPMVVMMVC是一种典型的应用程序架构模式,其中M代表模型,V代表视图,C代表控制器。在Android中,MVC通常用规定ViewController或Activity来实现。 MVP是Model-View-Presenter的缩写,其中M代表模型,V代表视图,P代表演示者。MVP将视图项分离,并引入中间者Presenter,以实现界面和业务逻辑分离的目的。在Android中,MVP通常实现在Activity或Fragment上。 MVVM是Model-View-ViewModel的缩写,其中M代表模型,V代表视图,VM代表视图模型。ViewModel担任中间件角色,处理视图中的数据,并使控制逻辑与视图分离开。在Android中,MVVM通常实现了Data Binding。 总的来说,三种架构模式都旨在将应用程序分离成各个组成部分,每个部分具有各自分离的职责,在开发Android应用程序时选择合适的架构模式,能够提高开发效率、提高代码质量、降低维护成本、提高整个应用程序的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

认真的小尹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值