三层架构对比:MVC、MVP、MVVM

三层架构(Model-View-XXX)是软件设计中用于分离关注点的经典模式,主要包括 MVC、MVP、MVVM。它们的关系和区别如下:


1. MVC(Model-View-Controller)

组成元素

职责
Model 数据和业务逻辑(如数据库操作、计算)
View 用户界面展示(如 HTML、UI 组件)
Controller 接收用户输入,更新 Model,选择 View

架构思想

  • 核心目标:解耦数据、界面和交互逻辑。
  • 交互方式
    • 用户 → View → Controller → Model → View(传统 Web MVC)
    • View 可监听 Model(如观察者模式,前端框架常用)

适用场景

  • 传统 Web 开发(如 Spring MVC、Ruby on Rails)
  • 桌面 GUI(如 Java Swing、.NET WinForms)
  • iOS(UIKit)

2. MVP(Model-View-Presenter)

组成元素

职责
Model 数据和业务逻辑(同 MVC)
View 被动 UI(只负责显示,不处理逻辑)
Presenter 代替 Controller,处理 UI 逻辑,直接更新 View

架构思想

  • View 和 Model 完全解耦,Presenter 作为中间人。
  • View 通过接口与 Presenter 通信(避免直接依赖)。
  • 适用于测试(Mock View 可轻松测试 Presenter)。

适用场景

  • Android 传统开发(Activity/Fragment 作为 View)
  • Windows Forms/WPF
  • 需要高可测试性的场景

3. MVVM(Model-View-ViewModel)

组成元素

职责
Model 数据和业务逻辑(同 MVC/MVP)
View UI 展示(如 HTML、XAML、React/Vue 组件)
ViewModel 提供 View 所需的数据和命令(双向绑定)

架构思想

  • 数据驱动 UI(View 自动响应 ViewModel 变化)。
  • 双向绑定(如 Vue 的 v-model、Angular 的 ngModel)。
  • 适合现代前端框架(减少手动 DOM 操作)。

适用场景

  • 前端框架(Vue、React + MobX、Angular)
  • WPF/Silverlight(微软系技术)
  • 需要响应式 UI 的场景

4. 关系与区别

架构 核心思想 数据流向 适用场景 典型框架
MVC 分层解耦 View → Controller → Model → View 传统 Web、GUI Spring MVC、Rails
MVP View 被动,Presenter 主导 View ↔ Presenter → Model → Presenter → View 高可测试性应用 Android (传统)、.NET WinForms
MVVM 数据绑定,自动同步 View ↔ ViewModel ↔ Model 现代前端、响应式 UI Vue、React、Angular、WPF

关键区别

  1. Controller vs Presenter vs ViewModel

    • Controller 接收请求并返回响应(Web 场景)。
    • Presenter 主动更新 View(测试友好)。
    • ViewModel 通过绑定自动同步 UI(减少手动更新)。
  2. View 的智能程度

    • MVC:View 可能监听 Model(如前端框架)。
    • MVP:View 完全被动,逻辑在 Presenter。
    • MVVM:View 绑定 ViewModel,自动更新。
  3. 数据流

    • MVC:可能双向(前端框架)或单向(传统 Web)。
    • MVP:单向(Presenter 控制一切)。
    • MVVM:双向绑定(UI 和数据自动同步)。

5. 如何选择?

  • 传统 Web 后端MVC(如 Spring、Django)
  • 需要高可测试性MVP(如 Android 传统开发)
  • 现代前端/响应式 UIMVVM(如 Vue、React)

这些架构并非完全独立,现代框架可能混合使用(如 React + Redux ≈ MVVM,Flutter 类似 MVP)。理解核心思想比严格区分更重要。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐