Android开发三分钟读懂mvc,mvp,mvvm,mvi

🍳 ​​1. MVC:传统大厨模式​

  • ​分工​

    👨‍🍳 ​​厨师(Controller)​ ​:Activity/Fragment 既做菜(逻辑)又摆盘(更新界面)

    🥬 ​​食材(Model)​ ​:数据对象(如用户信息)

    🍽️ ​​餐盘(View)​​:XML布局文件

  • ​痛点​

    大厨忙疯了!又要炒菜又要端盘子,后厨乱成一锅粥(Activity 代码超1000行)

  • ​适用​​:超简单页面(如显示静态文本)


👔 ​​2. MVP:雇佣服务员​

  • ​分工​

    👨‍🍳 ​​厨师(Model)​ ​:专注做菜(数据处理)

    💁 ​​服务员(Presenter)​ ​:传菜+沟通(连接View和Model)

    🍽️ ​​顾客(View)​​:只管吃和提需求(Activity只处理点击事件)

  • ​优势​

    服务员扛下所有沟通脏活,厨师专注烹饪

    ✅ 测试方便(服务员可单独测试)

  • ​劣势​

    招太多服务员(Presenter接口爆炸),工资开销大(代码量多)

  • ​适用​​:需要强测试的中型项目(银行App等)


🤖 ​​3. MVVM:智能送餐机器人​

  • ​分工​

    🤖 ​​机器人(ViewModel)​ ​:自动送餐+通知厨师补货(数据绑定)

    👨‍🍳 ​​厨师(Model)​ ​:做菜

    🍽️ ​​顾客(View)​​:坐等菜品上桌(XML绑定数据自动刷新)

  • ​魔法​

    xml 复制代码
    <!-- XML里直接绑定ViewModel数据 -->
    <TextView
        android:text="@{viewmodel.userName}" /> <!-- 数据变,文字自动变! -->
  • ​优势​

    顾客不用喊"服务员上菜!"(减少手动更新UI代码)

    ✅ 代码精简30%

  • ​坑​

    机器人故障时难修(数据绑定调试复杂)

    ❌ 过度绑定导致XML臃肿

  • ​适用​​:90%现代App(配合Jetpack ViewModel+LiveData)


🧩 ​​4. MVI:流水线车间​

  • ​分工​

    📦 ​​流水线(Model代表状态)​ ​:
    数据状态 = 加载中/成功/失败(统一封装)

    🎮 ​​遥控器(Intent)​ ​:用户动作(点击、滑动)

    🖥️ ​​控制台(ViewModel)​​:处理Intent并输出新状态

  • ​流程​

    ​点击按钮 → 发出Intent → VM处理 → 更新State → UI自动刷新​

  • ​优势​

    杜绝"半成品菜"(状态始终可预测)

    ✅ 适合复杂页面(如电商商品页含库存/优惠/评价联动变化)

  • ​劣势​

    要写很多包装类(State/Intent)

    🚫 小项目杀鸡用牛刀

  • ​适用​​:高交互复杂页面(滴滴实时打车、股票行情)


🔍 ​​架构选择决策树​

css 复制代码
graph TD
    A[项目需求] --> B{页面简单?}
    B -->|是| C[用MVC摆烂]
    B -->|否| D{需要强测试?}
    D -->|是| E[选MVP]
    D -->|否| F{状态是否复杂多变?}
    F -->|是| G[上MVI]
    F -->|否| H[MVVM一把梭]

📊 ​​各架构代码量对比​

架构 写登录页面代码行数 特点
MVC 300行 全堆在Activity里
MVP 450行 View接口+Presenter类
MVVM 200行 XML绑定+ViewModel
MVI 350行 状态机+Intent封装

💡 ​​终极建议​

  • ​新手村​ :从 MVVM 开始(Google官方推荐,教程多)
  • ​做外包​ :用 MVP(客户需求变得快,好测试)
  • ​大厂复杂应用​ :核心页面用 MVI(如淘宝购物车),普通页面用 MVVM
  • ​维护老项目​MVP 改造 MVC 比拆了重写更靠谱

🌟 ​​记住​ ​:架构是​​服务需求​​的奴隶,不是供奉的神像------先跑通业务,再优化架构!

相关推荐
Sirens.9 小时前
MySQL表设计进阶-约束范式连接索引与事务
android·数据库·mysql
zh_xuan12 小时前
安卓上 mmap读取并修改文件内容
android·mmap
二流小码农12 小时前
鸿蒙开发:实现文本渐变效果
android·ios·harmonyos
光头闪亮亮13 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(中)
android·c++·go
光头闪亮亮13 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(上)
android·sqlite·go
光头闪亮亮13 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(下)
android·c++·go
Ch_champion14 小时前
2018年之前的Android 项目上使用的技术点(及第三方库)
android
龚礼鹏14 小时前
RK Android16 wifi 投屏失败问题排查
android
晓梦林16 小时前
[ACTF2020 新生赛]BackupFile学习笔记
android·笔记·学习
ITmaster073117 小时前
告别 IDE?Android CLI 来了,开发进入 AI Agent 时代
android·ide·人工智能