一、MVC 的本质:不是技术,是“理念/架构模式”
- MVC = Model–View–Controller
- 它不属于某一种语言,而是一种关注点分离(Separation of Concerns)的设计思想
- 各语言/平台只是按这个理念实现了自己的 MVC 框架:
| 平台 | 典型 MVC 框架 |
|---|---|
| Java | Struts、Spring MVC |
| PHP | ThinkPHP、Laravel、Smarty(偏 View) |
| .NET | ASP.NET MVC、Vici MVC 等 |
理论上,任何人都可以写一个 MVC 框架,本质就是一个类库(dll)
二、ASP.NET MVC 的“身份”
- 官方出品:微软 2009 年发布第一个版本
- 核心程序集:
System.Web.Mvc.dll - 安装 VS / MVC 模板后,默认就存在于电脑中
- 创建 MVC 项目时,自动引用相关 DLL
和 WebForm 的关系
- 底层完全一致,都是 ASP.NET
- 共用:
HttpApplicationHttpContextHttpModuleHttpHandler
- 区别在上层抽象方式不同
| 对比 | WebForm | ASP.NET MVC |
|---|---|---|
| 页面模型 | 事件驱动(类似 WinForm) | 请求驱动 |
| 前后端 | aspx + aspx.cs | Controller + View + Model |
| 耦合度 | 较高 | 低 |
| 控制力 | 封装强,偏“黑盒” | 更透明、可控 |
三、MVC 三大角色各司其职
Controller(控制器)——大脑
- 接收请求
- 决定:
- 调哪个 Model
- 如何处理业务
- 返回哪个 View
- 不关心页面长什么样
Model(模型)——数据 & 业务
- 和数据库打交道
- 实体类(Entity)
- 业务逻辑、数据校验
- 可包含 Repository / Service 层
View(视图)——展示层
- 只负责:
- HTML
- CSS
- 页面交互
- 尽量不包含业务/数据逻辑
核心目标:分离关注点,方便协作与维护
四、从 ASP → ASP.NET → ASP.NET MVC 的演进
| 阶段 | 特点 | 问题 |
|---|---|---|
| ASP | HTML + 脚本混写 | 难维护 |
| ASP.NET WebForm | 前后台分离(aspx / cs) | 事件模型重、耦合高 |
| ASP.NET MVC | 彻底分层 | 学习曲线稍陡 |
五、补充
- MVC 概念最早不是给 Web 用的
- 1971 年左右提出
- 最初用于 Smalltalk 的 GUI 应用
- WinForm / WPF 一般不用 MVC
- 常见的是:
- MVP
- MVVM
- 常见的是:
- System.Web.dll 仍然可用
- MVC 并没有“推翻”ASP.NET
- 很多底层能力依然来自它
总结
ASP.NET MVC 是微软基于 MVC 理念,在 ASP.NET 基础上封装的一套 Web 开发框架,通过 Controller、Model、View 的分离,实现关注点分离和更清晰的架构。
如果你愿意,我可以帮你:
- 把这份内容整理成 标准课堂笔记版
- 或画一份 MVC 请求流程脑图(文字版)
- 或按“考试问答”形式出几道题给你练手
你下一步想怎么用这份内容?