Skip to content

🛡️ 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}: 删除资源

🧪 测试策略

采用 测试金字塔 策略,保证测试覆盖率。

  1. 单元测试 (Unit Test): 使用 JUnit 5 + Mockito,针对 Service 层逻辑进行独立测试,不启动 Spring Context。
  2. 集成测试 (Integration Test): 使用 @SpringBootTest + Testcontainers (可选),验证 Controller 到 Database 的完整流程。
  3. 切片测试: 使用 @WebMvcTest 测试 Controller 层,@DataJpaTest@MybatisTest 测试持久层。

最后更新于: