以下是 MVVM、MVC、MVP 及可能混淆的 MVM 模式的明确解释:
1. MVC(Model-View-Controller)
-
核心组件:
- Model:数据与业务逻辑(如数据库操作、计算)
- View:UI 展示层,直接渲染 Model 数据
- Controller:接收用户输入,协调 Model 和 View 的更新
-
数据流向:
用户操作 → Controller → Model变更 → View更新
- 典型应用
- 服务端框架(Ruby on Rails)
- 前端框架(Backbone.js)
2. MVP(Model-View-Presenter)
- 核心组件:
- Model:同 MVC
- View:负责 UI 展示,将用户操作传递给 Presenter
- Presenter:作为 View 和 Model 的中间层,处理所有逻辑
- 数据流向:
用户操作 → View → Presenter → Model变更 → Presenter → View更新
- 典型应用
- Android 开发(Google 推荐架构)
- 前端复杂表单处理
3. MVVM(Model-View-ViewModel)
-
核心组件:
- Model:同 MVC
- View:负责 UI 展示,绑定 ViewModel 的数据
- ViewModel:通过数据绑定和事件监听实现 View 和 Model 的双向同步
-
数据流向:
View变更 ↔ ViewModel ↔ Model变更
- 典型应用
- Vue.js、Angular、Knockout.js
- React(配合 Redux 等状态管理库)
4. MVM(Model-View-Model)
- 注意:这是一个容易混淆的概念,实际开发中并不存在标准的 “MVM” 模式。
- 可能的误解:
部分人将 MVVM 简称为 MVM,但这种缩写不规范。
少数场景中,“MVM” 可能指代Model-View-Mediator(类似 MVP 的变体),但非常罕见。 - 建议:面试中避免提及 MVM,以防概念混淆。
模式 | 核心思想 | 数据流动 | 典型框架 |
---|---|---|---|
MVC | 控制器协调视图与模型 | 单向(C 主导) | Backbone.js、Rails |
MVP | 演示者完全解耦视图与模型 | 单向(P 主导) | Android |
MVVM | 通过 ViewModel 实现双向数据绑定 | 双向(自动同步 | Vue.js、Angular |