You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无数据库交互的Spring Boot项目应当如何设计合理的项目结构?

Spring Boot 纯外部API调用场景的项目结构建议

你的原有调整思路本身是完全可用的,具体可以根据项目的规模和后续扩展需求选择两种方案:

方案1:极简场景直接沿用原有结构调整

如果项目非常小、总共只有个位数的接口,且调用的外部API不超过3个,那完全可以直接删掉repository层,把外部API调用逻辑直接写在service层即可,不用额外分层增加不必要的复杂度。
调整后的结构如下:

my-app/
├─ com.company/
│  ├─ model/
│  ├─ controller/
│  ├─ service/
│  ├─ MyAppMainClass.java

各层职责和你之前的认知一致,不需要额外调整。

方案2:中大规模/有扩展需求的场景优化分层

如果后续有扩展可能,或者当前已经需要对接多个不同来源的外部API,建议新增一层client(也可叫integration/connector)单独封装外部API调用逻辑,和原来的repository层定位类似,只是数据源从数据库换成了第三方REST接口,职责拆分更清晰。
调整后的结构如下:

my-app/
├─ com.company/
│  ├─ model/
│  ├─ controller/
│  ├─ service/
│  ├─ client/
│  ├─ MyAppMainClass.java

各层职责:

  • model/:存放所有实体类,包括你自身接口的出入参、外部API的请求/响应映射类,参数较多的话也可以在内部加dto、vo等子文件夹做区分
  • controller/:和之前一致,负责路由配置、请求参数校验、将请求转发到对应service处理
  • service/:仅存放核心业务逻辑,比如参数组装、多API调用的编排、业务规则校验、结果转换,不直接编写HTTP调用代码
  • client/:每个外部依赖的服务对应一个Client类,仅负责封装对应服务的HTTP请求逻辑、异常处理、参数序列化/反序列化,比如对接用户服务就写UserApiClient,对接订单服务就写OrderApiClient

这种分层是Spring生态里对接外部接口的通用最佳实践,后续如果要调整第三方接口的调用参数、加降级限流、替换接口实现,都只需要修改对应Client类的代码,不会污染核心业务逻辑,可维护性高很多。

最后补充:没有强制的标准结构,所有分层都是为了提升代码可维护性,完全可以根据项目实际情况灵活选择,没必要为了符合规范强行做无意义的分层。

内容的提问来源于stack exchange,提问作者kaushalpranav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:42:02