在 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 项目开发中常用的架构模式,它可以有效地提高代码的质量和可维护性。通过将代码逻辑分层,我们可以降低代码的耦合度,提高代码的可读性和可复用性,从而使我们的项目更加健壮和易于扩展。
以上就是关于三层架构的有关知识,感谢各位看官的观看,下期见,谢谢~