当前位置: 首页 > news >正文

MVC、MVP、MVCC 和 MVI 架构的介绍及区别对比

 ✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏:
✨特色专栏: 知识分享
🥭本文内容: MVC、MVP、MVCC 和 MVI 架构的介绍及区别对比
📚 ** ps **  : 阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。


目录

一、背景

​​1. MVC(Model-View-Controller)​​

​​核心思想​​

​​特点​​

​​问题​​

​​2. MVP(Model-View-Presenter)​​

​​核心思想​​

​​特点​​

​​变体​​

​​问题​​

​​3. MVCC(Model-View-Controller-Components)​​

​​核心思想​​

​​特点​​

​​与MVC区别​​

​​4. MVI(Model-View-Intent)​​

​​核心思想​​

​​特点​​

​​关键概念​​

二、​​架构对比表​​

​​三、如何选择​

​​四、趋势​​


一、背景

初入安卓开发,便遇到的以前做后端从未见过的设计模式。MVI?MVI是什么.....于是在网上扑腾资料,逐渐学习了多种架构模式。MVC、MVP、MVCC 和 MVI 是软件设计和架构中常见的模式或概念,各自适用于不同的场景。


​1. MVC(Model-View-Controller)​

​核心思想​
  • ​Model​​:数据逻辑和业务规则,独立于UI。

  • ​View​​:用户界面展示,被动反映Model状态。

  • ​Controller​​:接收用户输入,协调Model和View的更新。

​特点​
  • ​View直接依赖Model​​:Model变化时直接通知View(如观察者模式)。

  • ​Controller职责模糊​​:在复杂场景中可能成为“上帝类”。

  • ​典型应用​​:传统Web框架(如Spring MVC)、早期iOS开发。

​问题​
  • ​紧耦合​​:View和Model直接交互,难以测试。

  • ​Controller膨胀​​:业务逻辑易堆积在Controller中。


​2. MVP(Model-View-Presenter)​

​核心思想​
  • ​Model​​:与MVC相同,处理数据逻辑。

  • ​View​​:被动界面,通过接口与Presenter交互。

  • ​Presenter​​:取代Controller,作为中间人处理业务逻辑,解耦View和Model。

​特点​
  • ​View与Model完全隔离​​:所有交互通过Presenter。

  • ​测试友好​​:Presenter可脱离View进行单元测试。

  • ​典型应用​​:Android开发(如Google官方早期示例)、WinForms。

​变体​
  • ​Passive View​​:View极简,所有逻辑在Presenter。

  • ​Supervising Controller​​:View可处理简单逻辑。

​问题​
  • ​手动同步​​:需显式更新View,代码量可能增加。

  • ​Presenter可能过重​​:复杂场景下仍需拆分。


​3. MVCC(Model-View-Controller-Components)​

​核心思想​
  • ​扩展MVC​​:引入Components(可复用的UI组件),每个组件有自己的MVC三角。

  • ​分层协作​​:父Controller协调子Components。

​特点​
  • ​模块化​​:适合大型应用(如ERP系统)。

  • ​典型应用​​:后端复杂UI系统(如JavaServer Faces)。

​与MVC区别​
  • ​组件化​​:UI拆分为独立功能单元,降低耦合。

  • ​层级化​​:父子Controller/Component的协作关系。


​4. MVI(Model-View-Intent)​

​核心思想​
  • ​单向数据流​​:用户输入(Intent)→ Model更新 → View渲染。

  • ​不可变Model​​:状态不可变,每次更新生成新Model。

  • ​响应式编程​​:基于RxJava或Kotlin Flow实现数据流。

​特点​
  • ​状态集中管理​​:所有状态变化可预测、易调试。

  • ​适合复杂交互​​:如实时数据更新(股票应用、聊天软件)。

  • ​典型应用​​:现代Android开发(Jetpack Compose)、前端(React+Redux)。

​关键概念​
  • ​Intent​​:用户动作的抽象表示(如按钮点击→LoadDataIntent)。

  • ​状态机​​:View仅反映当前Model状态。


二、​​架构对比表​

特性

MVC

MVP

MVCC

MVI

​核心目标​

基础分离关注点

解耦View与Model

组件化复用

单向数据流+状态管理

​数据流向​

双向(View↔Model)

双向(通过Presenter)

层级化双向

严格单向(Intent→Model→View)

​测试难度​

较难(View耦合)

较易(Presenter可测)

中等(组件依赖)

易(状态可追踪)

​适用场景​

简单Web/iOS应用

传统Android应用

企业级后端UI

现代响应式应用

​典型框架​

Spring MVC, Django

Android Architecture

JSF, ASP.NET

Jetpack Compose, Redux


​三、如何选择

  • ​快速开发简单应用​​:MVC(如博客网站)。

  • ​需要高可测试性​​:MVP(遗留Android项目)。

  • ​企业级复杂UI​​:MVCC(后台管理系统)。

  • ​现代响应式UI​​:MVI(实时数据应用、移动端)。


​四、趋势​

  • ​移动端​​:MVP → MVVM(Data Binding) → MVI(Jetpack Compose)。

  • ​前端​​:MVC → Flux/Redux(类似MVI)。

  • ​后端​​:MVC → 分层架构(DDD+CQRS)。


 最后,

        希望文章对你有所帮助!

http://www.dtcms.com/a/339472.html

相关文章:

  • 面试题储备-MQ篇 2-说说你对RocketMQ的理解
  • 基于WebSocket和SpringBoot聊天项目ChatterBox测试报告
  • 怎样平衡NLP技术发展中数据质量和隐私保护的关系?
  • 中科米堆CASAIM自动化三维测量设备测量汽车壳体直径尺寸
  • 多模态大模型应用落地:从图文生成到音视频交互的技术选型与实践
  • 5.1Pina介绍
  • 进程间的通信(管道,信号)
  • 知行社:以爱之名,共筑公益梦想
  • Podman:Mysql(使用卷)
  • 【Goland】:面向对象编程
  • Day 29 类的装饰器
  • 如何将任意文件一键转为PDF?
  • 【PHP】模拟斗地主后端编写
  • Matplotlib数据可视化实战:Matplotlib图表美化与进阶教程
  • 软件系统运维常见问题
  • idea中如何设置文件的编码格式
  • Python Day31 JavaScript 基础核心知识点详解 及 例题分析
  • 【完整源码+数据集+部署教程】太阳能板表面损伤检测图像分割系统源码和数据集:改进yolo11-DynamicHGNetV2
  • 服务器Linux防火墙怎样实现访问控制
  • Nginx前后端分离反代(VUE+FastAPI)
  • (一)八股(数据库/MQ/缓存)
  • 深入理解抽象类
  • C#三大核心特性
  • 小程序插件使用
  • Win/Linux笔记本合盖不睡眠设置指南
  • UART串口通信编程自学笔记30000字,嵌入式编程,STM32,C语言
  • 【软件安装】VScode介绍安装步骤及中文界面设置方法
  • 移动端即时通讯源码/IM聊天源码RainbowChat,纯原生体验丝滑、全源码易二开
  • NestJS 依赖注入方式全解
  • jmetergrafanainfluxdb搭建压测监控平台