Skip to content

MVC设计模式

OO设计原则

五大设计原则(SOLID):

  • 单一职责原则 (Single Responsibility Principle)

    • 每个方法或类应当做一件事情,或者只有一项职责。
  • 开闭原则(Open Close Principle)

    • 开闭原则就是说对扩展开放,对修改关闭。
  • 里氏代换原则(Liskov Substitution Principle)

    • 任何基类可以出现的地方,子类一定可以出现。
  • 接口隔离原则(Interface Segregation Principle)

    • 使用多个隔离的接口,比使用单个接口要好。
  • 依赖倒转原则(Dependence Inversion Principle)

    • 对接口编程,依赖于抽象而不依赖于具体。

OO设计模式

设计模式是对软件设计过程中反复出现的典型问题,总结出的可复用、经过验证的解决方案与设计思路,是软件开发的最佳实践。

它用于优化代码结构、降低耦合、提高可扩展性与可维护性,同时统一开发者之间的设计沟通语言。

在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 《Design Patterns - Elements of Reusable Object-Oriented Software》的书,该书首次提到了软件开发中设计模式的概念。

设计模式通常分为三大类:

  1. 创建型模式:关注对象的创建与实例化过程
  2. 结构型模式:关注类或对象的组合与结构关系
  3. 行为型模式:关注对象间的交互、通信与职责分配

合理使用设计模式,能让系统更灵活、易扩展、易维护,是实现高质量软件设计的重要手段。


MVC设计模式

MVC 是一种软件架构设计模式,核心思想是职责分离,将一个应用划分为三个核心部分,以降低耦合、提高代码可维护性和扩展性。协作原理图如下:

flowchart LR User[用户]:::info V[View 视图]:::success C[Controller 控制器]:::warning M[Model 模型]:::danger User -->|1 交互/请求| V V -->|2 转发请求| C C -->|3 调用业务| M M -->|4 返回数据| C C -->|5 更新视图| V V -->|6 展示结果| User
MVC设计模式原理图
  • Model(模型) 负责数据封装、业务逻辑处理和数据持久化,与视图和控制器无关,独立维护数据状态。

  • View(视图) 负责数据展示与用户界面渲染,只做显示,不处理业务逻辑。

  • Controller(控制器) 作为中间调度层,接收用户请求,调用模型处理数据,再选择视图进行响应。

  1. 用户通过视图发出请求
  2. 控制器接收并处理请求
  3. 控制器调用模型完成业务与数据操作
  4. 模型返回数据给控制器
  5. 控制器将数据交给视图渲染并展示给用户
  • 职责清晰,视图与业务逻辑分离
  • 代码耦合度低,便于维护、扩展和测试
  • 支持前后端分工开发
  • 便于界面灵活替换(同一套业务可适配多端展示)

JavaWeb与设计模式

Model1

Model1 是 Java Web 早期最基础的开发模式 = “JSP + JavaBean“。它没有 Servlet、没有 Controller,是最原始的两层结构,模式原理如下:

flowchart LR User[用户]:::info JSP[JSP]:::success Bean[JavaBean]:::danger DB[(DB)]:::danger User -->|1 请求| JSP JSP -->|2 调用| Bean Bean -->|3 操作| DB DB --> Bean Bean --> JSP JSP -->|4 响应| User
Model1模式
  • JSP页面:显示 + 业务逻辑处理
  • JavaBean:封装数据、简单业务
  1. 用户访问 JSP
  2. JSP 直接接收参数、调用 JavaBean
  3. JavaBean 处理数据/业务
  4. JSP 直接把结果渲染成页面返回
  1. 只有两层:JSP(视图+控制)+ JavaBean(模型)
  2. JSP 大包大揽:接收请求、处理逻辑、连接数据库、输出页面
  3. 没有控制器(Controller)
  4. 开发速度快、结构简单
  5. 适合小型项目
  • 结构简单,上手快
  • 小型项目开发效率极高
  • 不需要复杂框架
  • 适合学习 Java Web 入门
  • 高耦合:JSP 里混写 HTML 和 Java 代码
  • 难以维护:逻辑和页面搅在一起
  • 难以分工:前端后端无法分开开发
  • 无法复用业务逻辑
  • 不适合大型项目

Model2

Model2 = Servlet + JSP + JavaBean,也就是标准 MVC 模式。其模式原理如下:

flowchart LR User[用户]:::info C[Servlet]:::warning V[JSP]:::success M[JavaBean]:::danger DB[(DB)]:::danger User -->|1 请求| C C -->|2 调用| M M -->|3 操作| DB DB --> M M --> C C -->|4 转发| V V -->|5 响应| User
Model2 模式
  • Servlet:Controller 控制器
  • JSP:View 视图
  • JavaBean:Model 模型(数据 + 业务)
  1. 用户请求 → Servlet 接收
  2. Servlet 调用 JavaBean 处理业务、查数据库
  3. 数据封装好,Servlet 转发给 JSP
  4. JSP 只负责展示页面,返回给用户
  • 职责清晰,低耦合
  • 便于维护、便于扩展
  • 前后端可以分工开发
  • 适合中大型项目
  • 便于复用业务逻辑
  • 结构比 Model1 复杂
  • 入门稍微麻烦一点

SMT架构

Spring MVC + MyBatis + Thymeleaf 是Java Web主流轻量级企业架构,基于Model2(MVC)模式,分工明确、低耦合,适用于中大型Web项目,核心分为视图层、控制层、业务层、持久层四层。架构组合原理如下:

flowchart LR User[用户]:::info C[Spring MVC]:::warning V[Thymeleaf]:::success S[Service]:::info M[MyBatis]:::danger DB[(DB)]:::danger User -->|1 请求| C C -->|2 调用| S S -->|3 操作| M M -->|4 操作| DB DB --> M M --> S S --> C C -->|5 渲染| V V -->|6 响应| User
SMT架构原理图
  • Thymeleaf(视图层):替代JSP,负责页面渲染与数据展示,支持HTML原生语法和动态数据绑定,可实现前后端分离预览。

  • Spring MVC(控制层):接收用户请求、解析参数、调度业务逻辑,传递数据至视图层,控制请求流转。

  • Service(业务层):封装核心业务逻辑与事务管理,调用持久层完成数据操作,将结果返回控制器,实现逻辑复用解耦。

  • MyBatis(持久层):通过XML或注解配置SQL,实现数据库交互,将结果封装为Java实体类,供业务层调用。

  • 数据库(DB):存储核心数据,接收MyBatis的SQL请求并返回数据。

  1. 用户发送HTTP请求,由Spring MVC前端控制器拦截并转发至对应Controller。

  2. Controller解析请求参数,调用Service层对应业务方法。

  3. Service层执行业务逻辑,调用MyBatis持久层接口发起数据操作。

  4. MyBatis执行SQL并与数据库交互,将结果封装为实体类返回Service层。

  5. Service层将处理后的数据返回Controller。

  6. Controller将数据传递给Thymeleaf视图层进行渲染。

  7. Thymeleaf生成HTML页面,响应给用户,完成请求-响应流程。

  • 职责分离:各层独立,降低耦合,便于维护扩展。

  • 开发高效:MyBatis简化数据库操作,Thymeleaf支持静态预览,Spring MVC简化请求处理。

  • 兼容性强:适配主流Web服务器与数据库,可无缝集成Spring生态。

  • 分工便捷:支持前后端分离协作,提升开发效率。


不同构架对比

Model1 Model2 SMT
结构 JSP + JavaBean Servlet + JSP + JavaBean SpringMVC + Service + MyBatis + Thymeleaf
控制层 无,JSP 兼任控制器 Servlet 作为控制器 SpringMVC 控制器
视图层 JSP JSP Thymeleaf
持久层 JDBC/简单封装 JavaBean 封装 MyBatis 专业持久层
业务层 简单业务逻辑 独立 Service 层 + 事务
耦合度 高,代码混乱 中等,职责分离 低,分层清晰
可维护性 较好 优秀
适用场景 入门、小Demo 学习MVC、小型项目 企业级、中大型项目
核心思想 简易开发 MVC 职责分离 分层架构 + 生态整合

总结

  • Model1:JSP 一把抓,简单但混乱,适合入门。
  • Model2:MVC 基础实现,Servlet 控制、JSP 展示、JavaBean 处理数据。
  • SMT:现代化企业级架构,分层更细、功能更强、易于维护和扩展。