目录 / 306-three-tier-architecture-rules
306-three-tier-architecture-rules
Spring Boot 三层架构(Controller-Service-Repository)详细规则 1. 分层职责明确 - Controller 层:负责处理 HTTP 请求与响应,接收前端参数,调用 Service 层处理业务逻辑,并返回结果。不应包含业务逻辑。 - Service 层:承载核心业务逻辑,处理数据校验、事务管理、业务规则等。可调用多个 Repository 完成复杂操作。 - Repository 层(或称 DAO 层):负责与数据库交互,执行 CRUD 操作。通常使用 Spring Data JPA、MyBatis 等持久化框架。 2. 依赖关系单向流动 - Controller 依赖 Service,Service 依赖 Repository。 - 禁止反向依赖(如 Repository 调用 Service)或跨层调用(如 Controller 直接调用 Repository)。 3. 接口与实现分离(推荐) - Service 层建议定义接口(如 UserService),实现类命名为 UserServiceImpl,便于扩展与测试。 - Repository 层通常直接使用 Spring Data JPA 提供的接口(如 JpaRepository),无需额外定义接口,除非有特殊需求。 4. 事务管理集中在 Service 层 - 使用 @Transactional 注解标注在 Service 方法上,确保业务操作的原子性。 - Controller 和 Repository 层不应使用 @Transactional。 5. 参数校验 - Controller 层使用 @Valid 或 @Validated 对入参进行校验(如 JSR-303 注解)。 - Service 层可进行二次业务校验,防止非法数据进入核心逻辑。 6. 异常处理统一 - 使用 @ControllerAdvice 或 @RestControllerAdvice 实现全局异常处理,避免在各层重复捕获异常。 - 自定义业务异常(如 BusinessException)由 Service 层抛出,Controller 层统一转换为用户友好响应。 7. 数据传输对象(DTO)使用 - Controller 与前端交互使用 DTO,避免直接暴露实体类(Entity)。 - Service 层内部可使用 Entity 或 VO(View Object),必要时进行 DTO 与 Entity 的转换(推荐使用 MapStruct 或手动转换)。 8. 日志记录 - 各层关键操作应添加日志(如 SLF4J + Logback),Controller 记录请求信息,Service 记录业务执行过程,Repository 记录数据操作。 9. 单元测试分层进行 - Controller 层使用 @WebMvcTest 进行 Mock 测试。 - Service 层使用 @MockBean 模拟 Repository。 - Repository 层使用 @DataJpaTest 进行数据库集成测试。 10. 包结构规范 推荐按功能模块分包,例如: ``` com.example.app ├── controller │ └── UserController ├── service │ ├── UserService │ └── UserServiceImpl ├── repository │ └── UserRepository ├── entity │ └── User ├── dto │ └── UserDTO └── exception └── BusinessException ``` 遵循以上规则,可确保 Spring Boot 应用结构清晰、可维护性强、易于测试与扩展。
这是模型对公开材料的总结,不是官方声明,请以原链内容为准。
存档时间线
| 版本 | 存档时间 | 内容哈希 | 内容 |
|---|---|---|---|
| v1 | 2026-11-12 23:25 | 8254b0ed | 可取 |
版本索引永久保留;内容副本只保留最新 1 份,更早版本仅留索引与哈希(存档时间线的证据链不会因此断裂)。
提交举报 / 纠错
侵权举报经核验成立后,我们会即时下线该条目并删除已存的内容副本。