← 每日面试题 学习看板

什么是MVC

面试题/00java/04 框架/01Spring/07Web MVC与事件驱动/什么是MVC.md

面试记录 2026-10-27(Round 29)

题目:什么是 MVC?

难度:difficulty/low

评分:⭐⭐⭐☆☆(3/5)

我的回答

MVC 是一种架构模式,核心是通过分层将业务实现的复杂度进行拆分,将业务拆分为 M 模型层、V 视图层、C 控制层,每层做自己的事情,降低实现复杂度。MVC 是当前最常用的 Web 功能实现模型,springMVC 框架就是基于 MVC 模型命名的。

点评

优点:抓准"分层拆复杂度"本质,M/V/C 职责划分正确。

不足:未讲三层各自细节(C 协调 / V 展示 / M 业务+数据);未提 springMVC 的 DispatcherServlet/HandlerMapping/ViewResolver 链路。

补充:MVC vs 三层架构 vs 前后端分离的关系。


完整讲解(权威版)

最后更新:2026-10-27 · 基于第 1 次作答

L1 · 30 秒速记

结论:MVC 是表现层架构模式,把"处理请求"和"展示结果"分离为 M/V/C 三块,降低耦合。 关键词:模型业务数据 · 视图渲染 · 控制器协调 边界:只解决表现层,不替代三层架构;前后端分离时 V 交给前端。

L2 · 核心讲解

核心考点定位:考察是否理解 MVC 的职责边界(不是业务分层),以及 springMVC 的请求处理链路。面试官想排除"把 MVC 当成整个系统分层"的错误认知。

机制链(≥3 环):

  1. 请求到达 Controller → 调 Model 拿数据:为什么——Controller 是协调者,不写业务,业务在 Model
  2. Model 返回数据 → Controller 选 View:为什么——展示与数据解耦,Controller 决定用哪个视图
  3. View 渲染 → 返回响应:为什么——View 只负责展示,不含业务逻辑,可复用

证据锚点(≥6):

对比与权衡:

方案正确性成本失败模式适用边界
MVC(同步渲染)职责清晰中C 臃肿、V 依赖后端模板服务端渲染
前后端分离前后解耦高(联调)C 只出 JSON,需约定接口大型前端/多端
三层架构分层清晰低与 MVC 混为一谈系统分层(非请求模型)

常见误区:

  1. 错误:MVC 就是三层架构 → 正确:MVC 是表现层请求模型,三层是系统分层 → 为什么:MVC 管"一个请求如何被处理",三层管"业务/持久/表现"分层,维度不同
  2. 错误:V 里写业务逻辑 → 正确:V 只渲染 → 为什么:违反分离关注点,V 含业务难测试难复用
  3. 错误:Controller 做所有事 → 正确:Controller 只协调 → 为什么:C 臃肿会变成 God Object

适用边界:MVC 只适用"请求-响应"的 Web 场景;非 Web 系统(如消息消费、定时任务)没有 V,不套 MVC;前后端分离后 V 移交给前端,后端只剩 C+M。

延伸追问(≥3)

  1. springMVC 一个请求的完整处理链路?
  1. MVC 和三层架构什么关系?
  1. 前后端分离怎么改 MVC?

面试者参考回答(400–700 字)

【结论】 面试官您好,MVC 是表现层的架构模式,把"处理请求"和"展示结果"分离成 M/V/C 三块,降低耦合、便于维护。

【三点】 第一,M 是模型——业务数据和业务逻辑,比如订单金额计算、库存扣减都在 M;V 是视图——只负责渲染,不写业务;C 是控制器——接收请求、调模型、选视图,是协调者。第二,价值是分离关注点:展示和业务解耦,V 可换、C 可测、M 可复用,多人协作互不干扰。第三,springMVC 里 DispatcherServlet 是前端控制器,所有请求先进它,经 HandlerMapping 找到对应 Controller,Controller 调 Service 处理业务,拿到数据后用 ViewResolver 找 View 渲染返回,形成完整链路。

【边界】 当然,MVC 只管表现层,不替代三层架构(表现/业务/持久);前后端分离时 V 移交给前端,后端 Controller 只返回 JSON,此时 MVC 里的 V 就弱化掉了。


作答历史

#日期评分本轮主要问题记录
12026-10-273/5未讲三层细节与 springMVC 链路第 1 次