DDD六边形架构中第三方API参数与返回类型存放位置咨询
关于DDD六边形架构中第三方API端口参数类的存放位置
结论:GetSomeDataInput 和 GetSomeDataResult 应该与 IThirdPartyAPI 接口一同放在应用服务层;若项目规模较大,也可放在独立的共享契约层,但核心原则是让这些类型属于内部核心契约的一部分,而非依赖外部基础设施层。
具体原因:
- 符合依赖倒置原则:六边形架构的核心逻辑(应用/领域层)定义对外的端口(即IThirdPartyAPI这类接口),外部基础设施层需要适配核心层的契约。参数和返回类型是端口契约的组成部分,必须由核心层定义,让基础设施层依赖核心层,而非反过来。如果把这些类型放在基础设施层,应用服务层会被迫依赖外部实现细节,完全违背了六边形架构“核心不依赖外部”的设计初衷。
- 隔离外部细节:这些输入输出类是核心层对第三方能力的抽象定义,不是第三方API的直接DTO。比如第三方API的请求参数可能包含冗余字段,响应结构也可能和核心层需求不一致,此时基础设施层的适配器需要负责在核心契约类型和第三方API格式之间做转换,核心层不需要关心外部API的具体结构,只关注自己需要的数据。
- 便于扩展与维护:后续如果更换第三方服务实现,只要新的适配器依然遵循应用层定义的IThirdPartyAPI接口及参数/返回类型,核心层代码完全不需要修改,符合开闭原则。
推荐项目结构示例:
src/ ├── application/ │ └── ports/ │ ├── IThirdPartyAPI.js │ ├── GetSomeDataInput.js │ └── GetSomeDataResult.js └── infrastructure/ └── adapters/ └── ThirdPartyAPIImpl.js // 实现IThirdPartyAPI,负责调用第三方REST API并转换数据格式
内容的提问来源于stack exchange,提问作者tarek salem
相关产品推荐
相关产品推荐

