✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏:
✨特色专栏: 知识分享
🥭本文内容: MVC、MVP、MVCC 和 MVI 架构的介绍及区别对比
📚 ** ps ** : 阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。
目录
1. MVC(Model-View-Controller)
2. MVP(Model-View-Presenter)
3. MVCC(Model-View-Controller-Components)
一、背景
初入安卓开发,便遇到的以前做后端从未见过的设计模式。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)。
最后,
希望文章对你有所帮助!