MVC,MVP,MVVM区别的形象化说明

MVP(Model-View-Presenter)

场景描述:

Model(模型) :菜单数据(菜品名称、价格、库存等)。 • View(视图) :菜单展示界面(顾客看到的菜单)。 • Presenter(主持人):服务员(负责接收顾客的点餐请求,处理逻辑,并更新菜单数据)。

流程:

  1. 顾客(用户)在菜单界面(View)选择菜品。
  2. 服务员(Presenter)接收顾客的点餐请求。
  3. 服务员(Presenter)检查菜单数据(Model)是否有库存。
  4. 如果有库存,服务员(Presenter)更新菜单数据(Model),并通知厨房(View 更新界面)。
  5. 如果没有库存,服务员(Presenter)告诉顾客"菜品已售罄"(View 更新界面)。

特点:

Presenter 是核心 :负责处理逻辑和协调 Model 与 View。 • View 和 Model 没有直接交互 :所有数据交互都通过 Presenter 进行。 • View 更被动:只负责展示数据,不处理逻辑。


MVVM(Model-View-ViewModel)

场景描述:

Model(模型) :菜单数据(菜品名称、价格、库存等)。 • View(视图) :菜单展示界面(顾客看到的菜单)。 • ViewModel(视图模型):智能服务员(负责将菜单数据转换为界面可展示的形式,并自动更新界面)。

流程:

  1. 顾客(用户)在菜单界面(View)选择菜品。
  2. 智能服务员(ViewModel)自动检测到顾客的选择,并检查菜单数据(Model)是否有库存。
  3. 如果有库存,智能服务员(ViewModel)更新菜单数据(Model),并自动更新菜单界面(View)。
  4. 如果没有库存,智能服务员(ViewModel)自动更新菜单界面(View),显示"菜品已售罄"。

特点:

ViewModel 是核心 :负责将 Model 数据转换为 View 可展示的形式,并自动更新 View。 • View 和 Model 没有直接交互 :所有数据交互都通过 ViewModel 进行。 • 数据绑定:View 和 ViewModel 之间通过数据绑定自动同步,无需手动更新界面。


三者的对比

特性 MVC MVP MVVM
View 和 Model 的交互 View 可以直接访问 Model View 不能直接访问 Model,必须通过 Presenter View 不能直接访问 Model,必须通过 ViewModel
核心角色 Controller Presenter ViewModel
View 的被动性 View 是主动的,可以直接更新自己 View 是被动的,只能通过 Presenter 更新 View 是被动的,通过数据绑定自动更新
交互方式 手动更新 通过 Presenter 手动更新 数据绑定,自动更新
适用场景 传统 Web 应用 需要解耦 View 和 Model 的场景 现代前端框架(如 Vue、React)

总结

MVC :像传统的餐厅点餐系统,服务员(Controller)是核心,负责协调顾客(View)和厨房(Model),但 View 和 Model 可以直接交互。 • MVP :像升级版的餐厅点餐系统,服务员(Presenter)完全接管了 View 和 Model 的交互,View 更被动,适合需要解耦的场景。 • MVVM:像智能餐厅点餐系统,智能服务员(ViewModel)自动处理一切,顾客(View)只需选择菜品,界面会自动更新,适合现代前端框架。

通过这个例子,可以更直观地理解 MVCMVPMVVM 的区别和适用场景。

相关推荐
朱 欢 庆4 小时前
云服务器附件备份到本机内网服务器
运维·服务器·前端·经验分享
支支დ9 小时前
VO by Vercel 前端特定优势:为什么它是构建 AI 应用的新范式
前端·人工智能
香芋芋圆10 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
INS_KF10 小时前
【编程笔记】成员函数中两个 const 的区别(const Data &getData() const;)
前端·javascript·笔记
宿67411 小时前
vue3-async
前端·javascript·vue.js
YXWik611 小时前
记录前端请求接口在浏览器请求响应的Preview和Response展示的一样的问题
前端
2501_9289962211 小时前
GPT-4o换DeepSeek迁移成本多少?中科热备解析API聚合平台技术账本
前端·数据库·人工智能
东风破_11 小时前
从跨域到 WebSocket:前端跨域方案、SSE 与双向实时通信详解
前端·后端
原则猫11 小时前
TS 类型工具
前端
excel12 小时前
Nuxt + Twin CSS 中宽度超过屏幕时底部出现空白的原因与解决方案
前端·javascript