Android MVC, MVP, MVVM, MVI 架构
MVC 架构
MVC 架构主要分为以下几个部分:
Model层:主要负责网络请求,数据库处理,I/O的操作,即页面的数据来源View层: 对于xml布局文件和java代码动态view部分Controller层: 主要负责业务逻辑,在android中由Activity承担
请求的流程:
- View接受用户的交互请求。
- View将请求转交给Controller。
- Controller操作Model进行数据更新。
- 数据更新之后,Model通知View数据变化。
- View显示更新之后的数据。
存在问题:
- Activity 同时负责管理 View 层与 Cnntroller 层的工作,会使Controller层变得臃肿
- View 与 Model 之间存在依赖关系,相互耦合不利于开发和维护
MVP 架构
MVP的构成:
View层:对应于Activity与XML,只负责显示UI,只与Presenter层交互,与Model层没有耦合Presenter层: 主要负责处理业务逻辑,通过接口回调View层,避免Activity的臃肿Model层:主要负责网络请求,数据库处理等操作,这个没有什么变化
流程:
- View 接收用户交互请求
- View 将请求转交给 Presenter(V调用P接口)
- Presenter 操作Model进行数据更新(P调用M接口)
- Model 通知Presenter数据发生变化(M调用P接口)
- Presenter 更新View数据(P执行接口,V相应回调)
相较于MVC:
- 在MVP中,Activity的代码不臃肿;
- 解耦。Model层与View层完全分离,修改V层不会影响M层,降低了耦合性。
- Presenter层与View层的交互是通过接口来进行的,便于单元测试。
- 可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。
仍然存在的缺点:
- 双向依赖:View 和 Presenter 是双向依赖的,一旦 View 层做出改变,相应地 Presenter 也需要做出调整。在业务语境下,View 层变化是大概率事件;
- 随着业务逻辑的增加,一个页面可能会非常复杂,这样就会造成
View的接口会很庞大。
MVVM 架构
MVVM模式将Presenter改名为ViewModel,基本上与MVP模式完全一致。
唯一的区别是,它采用双向数据绑定(data-binding):View的变动,自动反映在ViewModel,反之亦然
同时将代码划分为三个部分:
- View:Activity 和 Layout XML 文件,与 MVP 中 View 的概念相同;
- Model:负责管理业务数据逻辑,如网络请求、数据库处理,与 MVP 中 Model 的概念相同;
- ViewModel:存储视图状态,负责处理表现逻辑,并将数据设置给可观察数据容器。
流程:
- View 接收用户交互请求
- View 将请求转交给ViewModel
- ViewModel 操作Model数据更新
- Model 更新完数据,通知ViewModel数据发生变化
- ViewModel 更新View数据
MVI 架构
MVI与MVVM很相似,其借鉴了前端框架的思想,更加强调数据的单向流动和唯一数据源。
![[Pasted image 20260424011110.png]]
分为三个部分:
Model: 与MVVM中的Model不同的是,MVI的Model主要指UI状态(State)。例如页面加载状态、控件位置等都是一种UI状态View: 与其他MVX中的View一致,可能是一个Activity或者任意UI承载单元。MVI中的View通过订阅Model的变化实现界面刷新Intent: 此Intent不是Activity的Intent,用户的任何操作都被包装成Intent后发送给Model层进行数据请求
MVI强调数据的单向流动,主要分为以下几步:
用户操作以Intent的形式通知Model
Model基于Intent更新State
View接收到State变化刷新UI。
![[Pasted image 20260424011212.png]]
参考资料:
Android 架构模式如何选择Android架构模式飞速演进,目前已经有MVC、MVP、MVVM、MVI。这篇文章就针 - 掘金
MVVM 进阶版:MVI 架构了解一下~MVVM架构被官方推荐,成为Android开发中的主流架构。不过软件开发中没有银 - 掘金
