Android 应用架构指南 -- 三种架构模式简介(MVC、MVP、MVVM)

一 简介

遵循摩尔定律,手机终端随着每年的更新换代,其性能也飞速增长。依附于此的 Android 应用规模也愈发复杂。截止 2023 年 4 月,最新版本 8.0.32 微信 apk 大小为 238MB,而对比 2011 年微信 1.0 版本 apk 包大小仅为 457KB,短短 12 年增长了 533 倍。

随着应用规模增大,功能扩展困难、测试规模大及并行开发难等问题愈发突出。为了从根本上解决这些问题,就需要对应用进行重构,此时应用架构设计就显得尤为重要。

Android 应用架构设计三步走:

  • 现象: 程序代码和资源越来越多,代码耦合度高,扩展、维护及测试困难
  • 手段: 分离代码,提炼模式
  • 结果: 确保应用的稳健性、可测试性和可维护性

下文主要介绍三种常见的架构设计模式 MVC、MVP、MVVM

二 MVC

MVC 全称 Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写。

image (1).png

  • View: 负责界面数据的展示,与用户进行交互;对应于 xml布局文件和 java 代码动态 view 部分;
  • Controller: 负责逻辑业务的处理;
  • Model: 负责管理业务数据逻辑,如网络请求、数据库处理和 I/O 的操作等。

MVC 初步解决了 Activity 代码太多的问题,但 Activity 天然不可避免要处理 UI,也要处理用户交互,导致 Activity 里糅合了视图和业务的代码,分离程度不够。

优点:

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

缺点:

  • 不适合中大型项目,View 层和 Controller 层连接过于紧密
  • View 层对 Model 层的访问效率低
  • 一般的高级 UI 页面工具和构造器不支持 MVC 模式

三 MVP

为了将 Activity 中的表现逻辑彻底分离出来,业界提出了 MVP 的设计。

MVP 全称 Model View Presenter,是模型(Model)-视图(View)-呈现者(Presenter)的缩写。

image (2).png

  • View: 只负责显示 UI,只与 Presenter 层交互,与 Model 层没有耦合。对应于 ActivityXML
  • Presenter: 负责处理业务逻辑,通过接口回调 View 层;
  • Model: 负责管理业务数据逻辑,如网络请求、数据库处理和 I/O 的操作等。

在 MVP 模式中,Model 与 View 无法直接进行交互,所以 Presenter 层会从 Model 层获得数据,适当处理后交给 View 层进行显示。在 MVP 模式中,Presenter 层将 View 层和 Model 层进行隔离,使 View 和 Model 之间不存在耦合,同时将业务逻辑从 View 层剥离。

优点:

  • 逻辑结构清晰,View 层代码不再臃肿,所有的交互都发生在 Presenter 内部

缺点:

  • View 层和 Presenter 层的交互需要定义接口方法,当交互非常复杂时,需要定义很多接口方法和回调方法,增加维护复杂度
  • Presenter 层 持有 View 层的引用,当用户关闭了 View 层,但 Model 层仍然在进行耗时操作,会有内存泄漏风险

四 MVVM

MVVM 全称 Model View ViewModel,模式改动在于中间的 Presenter 改为 ViewModel,MVVM 同样将代码划分为三个部分:

  • View: 与 MVP 中 View 的概念相同;
  • ViewModel: 连接 View 与 Model 的中间桥梁,ViewModel 与 Model 直接交互,通过 DataBinding 将数据变化反应给 View;
  • Model: 负责管理业务数据逻辑,如网络请求、数据库处理和 I/O 的操作等。

在实现细节上,View 和 Presenter 从双向依赖变成 View 可以向 ViewModel 发指令,但 ViewModel 不会直接向 View 回调,而是让 View 通过观察者的模式去监听数据的变化,有效规避了 MVP 双向依赖的缺点。

优点:

  • 模块间充分解耦,结构清晰,职责划分清晰
  • 在 MVP 的基础上,MVVM 把 View 和 ViewModel 也进行了解耦

缺点:

  • View 与 ViewModel 的交互分散,缺少唯一修改源,不易于追踪
  • 复杂的页面需要定义多个 MutableLiveData,并且都需要暴露为不可变的 LiveData

五 参考文献

Jetpack 系列(5)—— Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI

MVC、MVP、MVVM,我到底该怎么选?

  • 32
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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应用程序时选择合适的架构模式,能够提高开发效率、提高代码质量、降低维护成本、提高整个应用程序的可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值