MVC简介
产生原因:
MVC(Model-View-Controller)模式诞生于20世纪70年代,由Trygve Reenskaug在施乐帕克研究中心(Xerox PARC)为Smalltalk语言设计,目的是解决图形用户界面(GUI)开发中代码混乱 的问题。核心目标是将数据管理(Model)、界面展示(View)和用户交互逻辑(Controller)分离,提升代码的可维护性和复用性。
发展历史与演变:
- 1979年:首次在Smalltalk-80中实现,奠定基础概念。
- 1988年:《Design Patterns》一书将MVC列为经典模式,推动其普及。
- Web时代 :适配为MVC框架(如Struts、Ruby on Rails),后端处理逻辑,前端简化成模板。
- 现代演变 :
- MVP/MVVM:针对前端复杂性衍生(如Android的MVP、Vue/React的MVVM)。
- 微服务架构:Model层拆分为独立服务,Controller转为API网关。
核心思想:
- 分离关注点 :
- Model:数据与业务逻辑(如数据库操作)。
- View:界面呈现(如HTML/UI组件)。
- Controller:接收输入,协调Model和View(如路由处理)。
- 松耦合:修改某一层时不影响其他层。

组成部分
Controller
控制器在不同的层面之间起着组织和管理作用,用于控制应用程序的流程,处理事件并做出响应。控制器做出的响应包括更新数据模型和选择视图解释数据模型。
控制器的具体作用如下:
- 定义应用程序的行为和流程;
- 响应用户动作,驱动模型改变;
- 选择用于响应的视图。
View
视图用于有目的地显示数据(在理论上,这不是必需的)。视图一般没有程序层面的逻辑,为了实现刷新功能,需要访问它所监视的数据模型,因此应该事先在它所监视的模型中注册监听事件。
视图的具体作用如下:
- 解释模型;
- 请求模型更新;
- 发送用户动作到控制器。
Model
模型模型用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法。它具有直接访问数据的权限,例如对数据库的访问。模型不依赖视图和控制器,即不关心被如何显示或者如何操作,但模型中的数据变化一般会通过某种刷新机制公布。为了实现这种刷新机制,用于监视相应模型的视图必须事先在相应模型上注册。
模型的具体作用如下:
- 封装应用程序的状态;
- 提供应用程序的功能;
- 查询响应状态;
- 通知视图改变。
使用场景:
- Web开发:Spring MVC(Java)、Django(Python)。
- 桌面应用:JavaFX、.NET WPF。
- 移动端:iOS(UIKit)、Android(早期Activity结构)。
- 前端框架:Angular、Ember.js(虽属MVVM,但受MVC启发)。
优缺点:
- 优点:结构清晰、易于协作、可测试性强。
- 缺点:小型项目可能过度设计,现代UI需结合MVVM等改进模式。