六边形架构中数据仓库接口层级疑问:与DDD规范冲突如何处理?
六边形架构与DDD中数据仓库接口的层级争议处理
核心认知:两者原则并非矛盾,是视角差异
- 六边形架构的核心是端口-适配器模式,通过抽象端口隔离内部核心与外部依赖,它不强制端口的具体层级,而是强调「内部核心不依赖外部,外部依赖内部抽象」的依赖反转规则。
- DDD要求数据仓库(Repository)接口属于领域层,是因为领域模型的持久化、查询需求必须由领域自身定义抽象,避免领域逻辑绑定具体存储实现,保持领域层的纯粹性与可测试性。
对图示误解的澄清
你提供的图中将存储接口置于应用层,这是对六边形架构端口职责的误读:
图中所谓的「存储接口」,不应是应用层定义的抽象,而应该是领域层定义的Repository接口——它属于六边形架构的「内部输出端口」,是领域核心对外暴露的持久化抽象。应用层的职责是编排领域服务、执行用例,它只需要调用领域层的Repository接口,而非定义它。
统一两者的实践方案
- 领域层定义抽象:在领域层内创建Repository接口,接口方法完全贴合领域模型的需求(比如
UserRepository.findById()、OrderRepository.save()),确保抽象服务于领域逻辑。 - 适配器实现抽象:具体的存储实现(如MySQL、Redis适配器)属于六边形架构的外部适配器,实现领域层的Repository接口,作为外部依赖接入系统。
- 应用层协调调用:应用层依赖领域层的Repository抽象,编排领域服务完成业务流程,不直接接触具体存储实现。
这种设计既符合DDD对领域层边界的要求,也完全契合六边形架构的端口-适配器规则——本质是用依赖反转原则打通两者的设计逻辑,不存在矛盾。
内容的提问来源于stack exchange,提问作者Ares
相关产品推荐
相关产品推荐

