后端三层架构

一、什么是三层架构?

三层架构是一种经典且通用的后端应用程序组织方式,它将一个应用程序的业务逻辑划分为三个具有明确职责的"层"

  • 适用场景: 无论是传统的单体Web项目,还是现在主流的前后端分离项目,都普遍采用三层架构。
  • 核心目的: 一个用户请求到达后端后,会依次经过这三个层的代码进行处理,最终返回结果。

二、三层的具体职责

这三层依次是:控制层、业务层、持久层

层级 别名 英文名 核心职责 说明
1. 控制层 Web层 Controller 1. 接收 前端请求(如 POST, GET, PUT, DELETE)。 2. 调用 业务层的方法处理业务。 3. 返回处理结果(数据或视图)给前端。 像公司的前台/接待员,负责与外部的沟通。
2. 业务层 服务层 Service 1. 处理核心业务逻辑 (如计算订单金额、验证用户权限等)。 2. 调用 持久层的方法。 3. 在业务层不应出现直接操作数据库的代码。 像公司的部门经理,负责处理具体的业务流程。
3. 持久层 数据访问层 Mapper / DAO 1. 直接与数据库打交道 。 2. 负责数据的增、删、改、查(CRUD) 操作。 像公司的仓库管理员,只负责货物的存取。

数据流转示例: 前端 -> Controller -> Service -> Mapper -> 数据库 数据库 -> Mapper -> Service -> Controller -> 前端

三、为什么使用三层架构?(优点)

  1. 职责清晰(单一职责):
    • 每一层只负责自己的事情,互不干扰。Controller 管请求响应,Service 管业务逻辑,Mapper 管数据库操作。
  2. 便于开发和测试:
    • 开发时可以分工合作,前端、后端业务逻辑、数据库操作可以由不同的人负责。
    • 测试时可以对每一层进行单独的单元测试(例如,可以 Mock Service 来测试 Controller)。
  3. 代码维护性高:
    • 代码结构清晰,可读性强。当需要修改时,能快速定位到相应的层,不会"牵一发而动全身"。
  4. 解耦:
    • 层与层之间通过接口调用,降低了耦合度。例如,更换数据库或持久层框架时,只需要修改 Mapper 层的实现,而 Service 层代码基本不用动。

四、在项目中的具体体现

在代码中,三层架构通常通过创建三个不同的包(Package) 来体现。

  • 包名(示例):
    • controller
    • service
    • mapper
  • 类的命名规范(示例):
    • XxxController (如 UserController)
    • XxxService (如 UserService)
    • XxxMapper (如 UserMapper)

五、关于持久层框架

直接使用原生的 JDBC 编写 SQL 非常繁琐。为了提升开发效率,我们通常会使用持久层框架

  • 常见框架:
    • MyBatis: 一个半自动化的框架,需要手动编写 SQL,灵活性高。
    • MyBatis-Plus: 在 MyBatis 基础上增强的国产框架。
    • JPA: Java 持久化 API,一种规范,最著名的实现是 Hibernate。
  • 视频中的选择:MyBatis-Plus
    • 优点: 它兼具了 MyBatis 和 JPA 的优点。
    • 你可以像 MyBatis 一样自由编写复杂 SQL
    • 你也可以使用它内置的通用 CRUD 方法,对于简单的增删改查,无需编写 SQL,开发速度极快。

总结: 三层架构是一种通过分治思想来管理复杂性的有效手段,是构建可维护、可扩展后端应用的基石。

相关推荐
毕设源码-林学长几秒前
计算机毕业设计java和Vue的安全教育科普平台设计与实现 安全知识普及与教育平台 安全教育信息化管理平台
java·开发语言·课程设计
ruleslol5 分钟前
java-接口适配器模式 & jsk8 接口默认实现
java·适配器模式
JohnYan6 分钟前
Bun技术评估 - 26 Abort
javascript·后端·bun
逛逛GitHub9 分钟前
国产首个开源 AI 原生后端平台,这次是真起飞了。
后端·github
Python私教10 分钟前
Rust 编程语言基础知识全面介绍
开发语言·后端·rust
鬼火儿10 分钟前
网卡驱动架构以及源码分析
java·后端
老华带你飞19 分钟前
房屋租赁|房屋出租|房屋租赁系统|基于Springboot的房屋租赁系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·vue·论文·毕设·房屋租赁系统
TDengine (老段)21 分钟前
TDengine 数学函数 ASCII 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
123461611 小时前
互联网大厂Java面试:从Spring Boot到微服务的探索
java·数据库·spring boot·微服务·面试·mybatis·orm
光仔December1 小时前
【Elasticsearch入门到落地】18、Elasticsearch实战:Java API详解高亮、排序与分页
java·elasticsearch·es排序·es分页·es高亮