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

发布于:2025-08-20 ⋅ 阅读:(15) ⋅ 点赞:(0)

 ✅作者简介:大家好,我是 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)。


 最后,

        希望文章对你有所帮助!


网站公告

今日签到

点亮在社区的每一天
去签到