【发布时间】:2022-06-12 09:09:14
【问题描述】:
我一直在尝试重构一个全新的项目以遵循六边形架构和 ddd 模式。
这是我的域的结构。我有文件和客户数据。实体明智地分开是有意义的。 “门面”对象将端口与域连接起来。快速示例:
Controller(应用层)--uses--> Facade --uses--> Ports 适配器(基础设施层)
我遇到的问题是我有第三个适配器(不在图片中),它是一个外部 OCR 应用程序。它是一个外部客户端(我们使用 feign 客户端连接他们的 API),它提供客户数据(第一个适配器),但也为我们提供图像的原始数据(第二个适配器)。
我的前两个适配器在我们的本地系统上具有实体、存储库和数据库,但考虑到六边形架构背后的理论,这第三个适配器在我自己的适配器中是有道理的。
但是我如何从其他两个适配器中使用它呢?他们三个应该在同一个适配器中,因为它们相互依赖吗? CustomerData 和 File 也有一对多的关系,所以这可能有意义吗?
到目前为止,我只实现了 File 部分,还没有重构 CustomerData 部分,因为我试图首先围绕这些概念展开思考。
我看过很多文章,但大多数都非常简单,没有真实世界的示例,而且它们具有明确的领域分隔。
非常感谢您提前澄清。
【问题讨论】:
-
这个最近的答案可能会给你一些背景:stackoverflow.com/a/72537033/615119。
-
这很有趣@FarhanNasim。不过,在该文件结构中,似乎所有内容都包含在一个适配器中,因为在同一级别上还有多个服务和存储库。在您的示例中,端口包的具体服务是否可以相互依赖?我觉得如果我可以在我的示例中使用另一个“外观”中的一个“外观”,那么一切都会解决,但同时我觉得它违反了设计模式。
-
我可以做的另一件事是有一个适配器,它带有一个到外部服务的伪装客户端,每个适配器都有不同的端点,而不是一个伪装客户端到配置了所有端点的外部服务。问题是这意味着复制配置等。
标签: spring-boot design-patterns domain-driven-design hexagonal-architecture