做前端开发的朋友,可能常听人提起 MVC 和 MVVM,但真要讲清楚它们差在哪,不少人一开口就卡壳。其实没那么玄乎,就像做饭用炒锅还是电饭煲——工具不同,干活的路子也不一样。
MVC:老派稳当的三件套
MVC 是 Model-View-Controller 的缩写,上世纪 70 年代就有的架构思想,后来被 Web 开发广泛借鉴。它把代码切成三块:
- Model:管数据,比如从后端拿来的用户信息、商品列表;
- View:管页面长啥样,就是你看到的 HTML 和样式;
- Controller:管逻辑,比如用户点了“提交”,它去调接口、校验表单、决定跳哪页。
举个例子:你在电商网站点“加入购物车”,Controller 收到点击,告诉 Model 去更新购物车数据,再让 View 刷新小红点数字。整个过程是“手动档”——View 不会自己变,得 Controller 显式通知它重绘。
MVVM:自动同步的懒人模式
MVVM 是 Model-View-ViewModel 的缩写,代表像 Vue、Knockout 这类框架的思路。它多了一个 ViewModel 层,核心特点是双向绑定——数据变了,界面自动跟着动;界面上用户改了输入框,数据也自动更新。
比如用 Vue 写一个计数器:
<div id="app">
<p>当前数量:{{ count }}</p>
<button @click="count++">+1</button>
</div>
<script>
new Vue({
el: '#app',
data: { count: 0 }
})
</script>你看不到手动操作 DOM 的代码,Vue 内部通过 ViewModel 把 data 和视图连起来了。你改 count,页面立刻刷新;反过来,如果其他代码改了 count,页面也一样动——不用你操心怎么“通知”。
关键区别,就三点
1. 数据驱动方式不同:MVC 是“我改完数据,再告诉你该画啥”;MVVM 是“我们绑定了,谁动了对方都知道”。
2. View 和 Model 的联系路径不同:MVC 中 View 只认 Controller,不直接碰 Model;MVVM 中 View 通过 ViewModel 间接读写 Model,但绑定关系由框架维护,开发者几乎不写更新逻辑。
3. 适用场景偏不同:传统后台渲染页面(比如 PHP + jQuery)常用 MVC 思路;而现代单页应用(SPA),尤其用 Vue、Angular 的项目,MVVM 更省力、更少出错。
打个比方:MVC 像你手写短信发给朋友,“我吃饭了”,发完就完事;MVVM 像开了微信语音通话,你说啥对方实时听见,对方说啥你也马上听到——中间那根线,框架已经帮你接好了。