Android 四大应用架构总结

本文详细介绍了Android的四种主要应用架构,包括MVC、MVP、MVVM和MVI,分析了各自的优缺点,强调了解耦、代码复用和技术栈如数据流和协程的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:学疏才浅,如有错误请各位不吝指教


前言

安卓的架构随着发展不断变更,学习新的框架才能走得更远。


一、MVC

mvc指model、view、controller。model层负责数据管理,典型的例子有网络传输以及各种实体类,而view层和controller层通常是紧密结合的,用户在view层的操作触发controller层的业务逻辑被调用,controller层再将返回的信息显示到view层中,典型的例子有Activity或fragmnet与它所绑定的xml文件。

优点

mvc作为比较传统的代码架构比较成熟,另外架构的模块化程度较高,数据与界面分离降低了耦合性

缺点

在复杂项目当中controller层会变得即为笨重,因为它承载了view以及各种业务逻辑,而相较而言view层和model层都比较轻量级,因此controller层的代码会比较难维护并且可读性低。另外,model层与view层耦合度较高。

二、MVP

mvp指model、view、presenter。model层和view层的职责与mvc的一致,最大的不同在于mvp是以presenter层作为view与model之间的交互层,会从model层中获取需要的数据,然后在view层中显示。另外,mvp中通常有contract接口,主要是用于统一管理view和presenter层的各种方法,它是一个接口,包含view层的接口和presenter层的接口,定义各自所需要的各个接口。view层只管ui,并且view层持有presenter的引用,通过持有的presenter来进行业务逻辑的实现,但不关注业务逻辑的具体细节,model层只管数据(bean/网络);presenter层持有view层与model层的引用,从model层进行数据的更新或者获取,再调用view层的方法去更新ui;model层只对presenter暴露,与view层完全隔离。

优点

相比mvc而言,mvp架构通过presenter层将model层和view层进行了隔离实现了解耦,使得代码的耦合度更低,复用性得以提升。

缺点

mvp框架中增加了contract类,导致代码复杂度提升,另外view层与presenter层的交互较多,导致这两层之间的耦合性较高,维护也会比较麻烦

三、MVVM

指model、view、viewmodel。view层与view层与之前的作用相似。其中,view与viewmodel双向绑定,model层负责管理数据并向viewmodel层传输数据。viewmodel通常需要继承viewmodel类,并且需要与view层的生命周期绑定。一般在viewmodel中会使用livedata/observablefield。

优点

view层与model层完全解耦,降低了耦合度,提高了代码的复用性。双向绑定技术使得设计人员可以专注于view层,而开发人员不需要去关注更新UI的操作,只需要专注于业务逻辑。并且mvvm的代码量更少、更轻量级。

缺点

每个view都绑定了viewmodel会导致内存花费多。

四、MVI

mvi分为界面层、数据层(界面与数据之间的网域层为可选层)。

view层

界面层包括界面元素(view)和界面状态(通常命名为XxState),虽然一般也会使用viewmodel(其中包含state类),但与mvvm架构最大的不同在于并非双向绑定,而是遵循单向数据流的设计模式。用户在界面上操作转给viewmodel,viewmodel中的state改变再传回到界面上显示

网域层

可以是一些复杂业务逻辑或重复使用的简单业务逻辑,通常命名为XxXxUseCase,它们可以被其他各种类使用。它们没有生命周期,而是受限于使用它们的类,如果是livedata则生命周期是隐式处理的,若是用数据流,最好是与协程一起使用,

数据层

由仓库和数据源组成,负责的任务需要包括数据的公开、处理、解决冲突、业务逻辑、以及对其余的数据源进行抽象化处理。通常存诸库类被命名为数据类型+来源类型(Remote/Local)+Repository。需为单一数据源(数据库、网络、文件……)。使用WorkManager来调度后台的操作是推荐的方案,一般调用enqueue、cancel方法。

需要使用到的技术栈:flow数据流、协程、……

### 下载 Popper.min.js 文件的方法 对于希望获取 `popper.min.js` 的开发者来说,可以通过多种方式来实现这一目标。通常情况下,推荐通过官方渠道或可靠的分发网络 (CDN) 来获得最新的稳定版文件。 #### 使用 CDN 获取 Popper.min.js 最简单的方式之一是从流行的 CDN 中加载所需的 JavaScript 库。这不仅简化了集成过程,还可能提高性能,因为许多用户已经缓存了来自这些服务提供商的内容。例如: ```html <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2/dist/umd/popper.min.js"></script> ``` 这种方式不需要手动下载文件到本地服务器;只需将上述 `<script>` 标签添加至 HTML 文档中的适当位置即可立即使用 Popper 功能[^1]。 #### 从 npm 或 yarn 安装 如果项目采用模块化构建工具链,则可以直接利用包管理器如 npm 或 Yarn 进行安装。命令如下所示: ```bash npm install @popperjs/core # 或者 yarn add @popperjs/core ``` 之后可以根据具体需求引入特定功能模块,而不是整个库,从而减少打包后的体积并优化加载速度[^2]。 #### 访问 GitHub 发布页面下载压缩包 另一种方法是访问 Popper.js 的 [GitHub Releases](https://github.com/popperjs/popper-core/releases) 页面,在这里可以选择不同版本的 tarball 或 zip 归档进行下载解压操作。这种方法适合那些偏好离线工作环境或是想要定制编译选项的人群[^3]。 #### 手动克隆仓库 最后一种较为少见但也可行的办法便是直接克隆完整的 Git 存储库副本。这样可以获得开发分支以及历史记录等更多信息,适用于贡献代码或者深入学习内部机制的情况。 ```bash git clone https://github.com/popperjs/popper-core.git cd popper-core ``` 完成以上任一途径后便能成功取得所需版本的 Popper.min.js 文件,并将其应用于个人项目之中[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值