🛡️ Spring 项目开发最佳实践
本章节总结了企业级 Spring/Spring Boot 项目开发中的核心最佳实践,旨在提升代码的可维护性、可扩展性和稳定性。
🏗️ 工程架构与分层
遵循标准的四层架构,确保职责单一,降低耦合。
| 层级 | 职责 | 规范 |
|---|---|---|
| User Interface (Web) | 处理 HTTP 请求、参数校验、结果封装 | *Controller, *DTO |
| Application (Service) | 业务逻辑编排、事务控制 | *Service, *ServiceImpl |
| Domain (Core) | 核心领域模型、业务规则 | Model, Entity, Domain Service |
| Infrastructure (DAO) | 数据持久化、外部接口调用、缓存 | *Mapper, *Repository |
依赖原则
- 上层依赖下层,严禁下层调用上层。
- 使用 构造器注入 (Constructor Injection) 替代
@Autowired字段注入,确保 Bean 的不可变性和易于测试。
java
// ✅ 推荐:构造器注入
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}📝 代码规范
DTO/VO/Entity 的区分
- Entity: 对应数据库表结构,仅在 Repository 层与 Service 层内部使用。
- DTO (Data Transfer Output): 数据传输对象,用于 Service 向下层或 Controller 传输数据。
- VO (View Object): 视图对象,Controller 返回给前端的展示数据,屏蔽敏感字段。
统一异常处理
不要在业务代码中到处使用 try-catch。使用 @RestControllerAdvice + @ExceptionHandler 进行全局异常捕获,并返回统一的 Result<T> 结构。
RESTful API 设计
- GET
/users/{id}: 获取资源 - POST
/users: 创建资源 - PUT
/users/{id}: 全量更新 - PATCH
/users/{id}: 部分更新 - DELETE
/users/{id}: 删除资源
🧪 测试策略
采用 测试金字塔 策略,保证测试覆盖率。
- 单元测试 (Unit Test): 使用 JUnit 5 + Mockito,针对 Service 层逻辑进行独立测试,不启动 Spring Context。
- 集成测试 (Integration Test): 使用
@SpringBootTest+Testcontainers(可选),验证 Controller 到 Database 的完整流程。 - 切片测试: 使用
@WebMvcTest测试 Controller 层,@DataJpaTest或@MybatisTest测试持久层。