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显示更新之后的数据。

存在问题:

  1. Activity 同时负责管理 View 层与 Cnntroller 层的工作,会使Controller层变得臃肿
  2. View 与 Model 之间存在依赖关系,相互耦合不利于开发和维护

MVP 架构

MVP的构成:

  • View层:对应于ActivityXML,只负责显示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 架构

MVIMVVM很相似,其借鉴了前端框架的思想,更加强调数据的单向流动和唯一数据源。

![[Pasted image 20260424011110.png]]

分为三个部分:

  • Model: 与MVVM中的Model不同的是,MVIModel主要指UI状态(State)。例如页面加载状态、控件位置等都是一种UI状态
  • View: 与其他MVX中的View一致,可能是一个Activity或者任意UI承载单元。MVI中的View通过订阅Model的变化实现界面刷新
  • Intent: 此Intent不是ActivityIntent,用户的任何操作都被包装成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开发中的主流架构。不过软件开发中没有银 - 掘金