Agent Skills
返回列表
💻

Spring Boot 架构模式指南

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/springboot-patterns-p5ue。

技能介绍

解决什么问题

在 Spring Boot 项目中,随着功能堆叠,很容易写出耦合过重、事务边界混乱、性能隐患难发现的代码。比如 Controller 直接注入 Repository 绕过 Service,导致业务逻辑分散;默认使用 EAGER 加载引发笛卡尔积查询;直接返回 JPA 实体把数据库表结构暴露给客户端;以及到处捕获 Exception 吞掉关键错误。本技能聚焦这些工程细节,提供一套可检查的模式与反模式清单。

核心能力与关键步骤

  • 分层职责:Controller 处理 HTTP 关注点,Service 承载业务逻辑,Repository 负责持久化。Controller 保持轻量,只做参数校验和委托。
  • DTO 边界:请求和响应一律使用 DTO,禁止直接把 JPA 实体暴露出去。这样表结构演进不会立刻破坏 API 契约。
  • 异常处理:通过 @RestControllerAdvice 实现全局异常处理器,返回符合 RFC 7807 的 ProblemDetail,替代散落的 try-catch。
  • 事务与加载策略:Service 层使用 @Transactional,读方法标注 readOnly = true。JPA 关系默认 FetchType.LAZY,用 Entity graphs 或 JOIN FETCH 按需取数据。
  • 配置管理:避免硬编码,使用 @Value 或 @ConfigurationProperties。
  • 测试:集成测试采用 @SpringBootTest 配合 Testcontainers,验证真实容器启动后的端到端行为。

适用边界与注意点

本技能是一套工程约定而非框架,适合中大型 Spring Boot 项目的代码评审与新人上手。它不替代架构决策,比如事件溯源或 CQRS 的场景需要单独评估。严格遵循 DTO 和异常规范会增加一定样板代码,但对长期维护和 API 演进是划算的。注意 LAZY 加载在序列化阶段容易触发 LazyInitializationException,务必在 Service 层完成数据组装。

使用场景

  • 编写REST API时,检查Controller是否绕过Service直接调用Repository,避免业务逻辑散落
  • 排查N+1查询时,用Entity Graph或JOIN FETCH按需加载关联数据,而非默认EAGER
  • 统一接口错误响应,为全局异常处理器配置RFC 7807 ProblemDetail替代散落的try-catch
  • 编写Service层事务方法时,为只读查询标注readOnly=true并避免捕获通用Exception

适合人员

  • 后端工程师:在Spring Boot项目中规范分层职责与事务边界
  • 架构评审者:Code Review时检查DTO隔离、延迟加载和异常处理约定
  • 后端开发:从单体迁移到微服务,需要统一持久化与错误响应策略