锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. Spring Boot 三层架构开发模式入门

Spring Boot 三层架构开发模式入门

0
  • JAVA
  • 发布于 2024-10-08
  • 15 次阅读
黄健
黄健

在 Spring Boot 项目中,构建清晰、易于维护的代码结构至关重要。传统业务逻辑方式往往将所有代码混杂在一起,导致代码难以理解、修改和扩展。三层架构模式的出现正是为了解决这些问题,让我们深入了解它带来的改变。

一、传统业务逻辑方式

假设我们要实现一个简单的员工查询功能,传统方式可能会将所有代码写在 Controller 层:

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @GetMapping("/{id}")
    public Employee getEmployee(@PathVariable Long id) {
        String sql = "SELECT * FROM employees WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(Employee.class));
    }
}


这段代码看似简洁,却隐藏着以下问题:

  • 代码耦合度高: Controller 层直接依赖 JdbcTemplate,与数据访问细节紧密绑定。

  • 职责不清晰: Controller 层既负责处理请求,又负责数据访问逻辑,违反了单一职责原则。

  • 代码难以复用: 如果其他模块需要查询员工信息,只能复制这段代码,造成冗余。

  • 难以维护和扩展: 当数据库操作发生变化时,所有涉及到该操作的代码都需要修改,增加了维护成本。

二、三层架构模式:分层解耦,各司其职

1.其实我们上述案例的处理逻辑呢,从组成上看可以分为三个部分:

  • 数据访问:负责业务数据的维护操作,包括增、删、改、查等操作。

  • 逻辑处理:负责业务逻辑处理的代码。

  • 请求处理、响应数据:负责,接收页面的请求,给页面响应数据。


2.为了解决传统方式的弊端,我们引入三层架构模式,将代码划分为以下三层:

  • 表现层(Controller): 负责接收前端请求,调用 Service 层处理业务逻辑,并将处理结果返回给前端。

  • 业务逻辑层(Service): 负责处理具体的业务逻辑,例如:参数校验、业务规则判断、调用其他服务等,并调用 Repository 层进行数据操作。

  • 数据访问层(Dao): 负责与数据库交互,进行数据的增删改查操作,屏蔽底层数据库操作细节。

3.基于三层架构的程序执行流程:

  • 前端发起的请求,由Controller层接收(Controller响应数据给前端)

  • Controller层调用Service层来进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)

  • Serivce层调用Dao层(逻辑处理过程中需要用到的一些数据要从Dao层获取)

  • Dao层操作文件中的数据(Dao拿到的数据会返回给Service层)

可以简单的理解为: 要去一个盒子套盒子 的盒子里面取东西,得先依次由外到内 打开所有盒子,拿到东西,再由内到外把盒子还原为初始状态。


三、解耦后的代码示例:清晰、易维护的结构

让我们用三层架构模式重构之前的员工查询功能:

开发顺序有两种,根据实际情况选择

方式一:Controller -> Service -> Dao

方式二:Dao -> Service -> Controller


1. 数据访问层 (Dao):

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    //与数据库交互
}

EmployeeRepository 负责直接与数据库交互,当然,复杂的SQL语句也可以通过mybatis映射文件进行操作,都是一个道理。

2. 业务逻辑层 (Service):

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public Employee getEmployeeById(Long id) {
        // 可以在这里添加业务逻辑,例如权限校验等
        return employeeRepository.findById(id).orElseThrow(() -> new RuntimeException("Employee not found"));
    }
}

EmployeeService 负责处理具体的业务逻辑,例如根据 ID 查询员工信息,并处理可能出现的异常。

3. 表现层 (Controller):

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @GetMapping("/{id}")
    public Employee getEmployee(@PathVariable Long id) {
        return employeeService.getEmployeeById(id);
    }
}

EmployeeController 只负责接收请求参数,调用 EmployeeService 处理业务逻辑,并返回结果。

四、三层架构模式带来的优势

通过上面的代码示例,我们可以看到三层架构模式带来的好处:

  • 降低耦合度: 各层之间通过接口交互,降低了层与层之间的依赖,提高了代码的灵活性。

  • 提高代码复用性: 将业务逻辑封装在 Service 层,可以方便地在不同的 Controller 或其他模块中复用。

  • 提高代码可读性和可维护性: 将代码逻辑分层,使得代码结构更加清晰,易于理解和维护。

  • 易于扩展: 当需求发生变化时,只需要修改相应的层即可,其他层不受影响。

五、总结

三层架构模式是 Spring Boot 项目开发中常用的架构模式,它可以有效地提高代码的质量和可维护性。通过将代码逻辑分层,我们可以降低代码的耦合度,提高代码的可读性和可复用性,从而使我们的项目更加健壮和易于扩展。


以上就是关于三层架构的有关知识,感谢各位看官的观看,下期见,谢谢\~

原文链接: https://blog.csdn.net/weixin_64178283/article/details/142718148

标签: #JAVA 991 #Spring Boot 173
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.