news 2026/7/31 16:47:18

Android MVC, MVP, MVVM, MVI 架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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开发中的主流架构。不过软件开发中没有银 - 掘金

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 16:46:39

【单片机毕业设计推荐】基于 STM32 或 51 单片机的红外测距与定时报警系统设计 基于 STM32 或 51 单片机的红外距离检测与时钟显示装置设计(022104)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能基础功能核心功能辅助功能技术路线项目演示关于我们项目案例源码获取温馨提示:本人主页置顶文章(点我)有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶…

作者头像 李华
网站建设 2026/7/31 16:43:39

MyBatis:动态 SQL 全景梳理

在实际业务开发中,数据库查询条件几乎不会一成不变:前端多条件筛选、非必填参数、动态排序、分页拼接、批量增删改等场景,固定写死的SQL语句完全无法适配业务需求。MyBatis 动态SQL 是其核心核心能力之一,区别于静态SQL&#xff0…

作者头像 李华
网站建设 2026/7/31 16:41:57

Shell脚本入门:从零到自动化,告别重复命令操作

1. 从“手忙脚乱”到“一键搞定”:为什么你需要Shell脚本 如果你在Linux或macOS的终端里,曾经为了完成一个任务,把同一串命令敲了十遍;或者,你需要在Windows的PowerShell里,每天重复执行一系列固定的文件整…

作者头像 李华