MVC模式:经典架构设计,让代码职责分明
MVC(Model-View-Controller)是一种经典的架构设计模式,用于分离应用程序的业务逻辑、用户界面和用户输入控制。它广泛应用于Web开发(如Spring MVC、Ruby on Rails)、桌面应用(如Java Swing)和移动开发(如iOS)。
1. MVC 的核心组成
① Model(模型)—— 数据与业务逻辑
- 职责:管理应用程序的数据和业务规则(如数据库操作、计算逻辑)。
- 特点:
- 不关心UI如何显示数据
- 数据变化时通知View更新(通常通过观察者模式)
② View(视图)—— 用户界面展示
- 职责:将数据可视化(如HTML页面、UI组件)。
- 特点:
- 被动接收Model的数据
- 不处理业务逻辑(如“用户点击后”应该触发什么由Controller决定)
③ Controller(控制器)—— 用户输入处理
- 职责:接收用户输入(如点击、表单提交),调用Model处理,并更新View。
- 特点:
- 是Model和View之间的“协调者”
- 通常不直接操作数据(委托给Model)
2. MVC 的交互流程
- 用户操作(如点击按钮) → Controller 接收请求
- Controller 调用 Model 处理业务逻辑(如查询数据库)
- Model 更新数据,并通知 View 刷新
- View 从 Model 获取最新数据,渲染界面
(示意图:用户请求 → Controller → Model → View → 响应)

关键步骤解析
-
用户触发事件
- 用户通过界面交互(如点击按钮、提交表单)。
- 示例:在电商网站点击“加入购物车”。
-
Controller 接收请求
- Controller 解析用户输入(如HTTP请求、事件对象),决定调用哪个Model方法。
// Spring MVC 示例 @PostMapping("/addToCart") public String addToCart(CartRequest request) { cartService.addItem(request); // 调用Model层 return "cartPage"; // 返回View名称 }
- Controller 解析用户输入(如HTTP请求、事件对象),决定调用哪个Model方法。
-
Model 处理业务逻辑
- Model 执行业务操作(如数据库读写、计算),并更新内部状态。
- 示例:
- 检查库存
- 更新购物车数据表
- 触发事件通知(如观察者模式)
-
View 渲染更新
- Model 通知View数据变化(或Controller直接返回View名称)。
- View 从Model获取最新数据,生成HTML/UI(不包含逻辑)。
<!-- Thymeleaf 模板示例 --> <div th:each="item : ${cart.items}"> <span th:text="${item.name}">商品名</span> </div>
-
用户看到新界面
- 最终呈现动态更新的界面(如购物车数量+1)。
技术栈中的典型实现
| 步骤 | Java (Spring MVC) | JavaScript (Backbone.js) | Ruby (Rails) |
|---|---|---|---|
| Controller | @Controller注解类 | Router 路由定义 | Controller 类 |
| Model | Service/Repository 层 | Backbone.Model | ActiveRecord 模型 |
| View | Thymeleaf/JSP 模板 | Backbone.View | ERB/Haml 模板 |
常见问题
-
Q:Model如何通知View?
- A:通常通过观察者模式(如Java的
PropertyChangeListener)或框架自动绑定(如Rails的render)。
- A:通常通过观察者模式(如Java的
-
Q:Controller能直接操作View吗?
- A:可以但不推荐(如JSP中用
<% %>写Java代码),应保持View被动渲染。
- A:可以但不推荐(如JSP中用
3. MVC 的优缺点
✅ 优点
- 职责分离:代码更清晰,便于维护(改UI不影响业务逻辑)。
- 复用性:同一Model可被多个View复用(如Web端和移动端共享数据逻辑)。
- 协作开发:UI设计师、后端开发可并行工作。
❌ 缺点
- 复杂度:小型项目可能显得“过度设计”。
- View与Model的耦合:部分框架中,View可能直接监听Model,导致调试困难(衍生出了MVP、MVVM等变体)。
4. MVC 的经典应用场景
- Web框架:Spring MVC(Java)、ASP.NET MVC(C#)、Ruby on Rails
- 桌面应用:Java Swing、Cocoa(Mac/iOS开发)
- 游戏开发:UI与游戏逻辑分离
5. MVC 的变体与对比
| 模式 | 核心思想 | 典型框架 |
|---|---|---|
| MVC | View直接观察Model变化 | Spring MVC, Rails |
| MVP | View通过Presenter与Model交互 | Android早期架构 |
| MVVM | View通过ViewModel自动绑定Model | Vue.js, WPF |
🔍 小知识:现代前端框架(如React/Vue)更倾向于MVVM,但MVC仍是后端开发的基石。
10万+

被折叠的 条评论
为什么被折叠?



