【问题标题】:Dependency between adapters in hexagonal architecture Spring Boot六边形架构 Spring Boot 中适配器之间的依赖关系
【发布时间】: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


【解决方案1】:

由于没有更好的主意,因为接口端口是门面实现的 bean,所以我在其他域的门面中连接我需要的端口,并以相同的方式使用它们,就好像它是同一个域的控制器一样.该图类似于:

Facade (domain1) --uses--> Port (of domain2)

编辑:

我发现了一个非常广泛的article,它对于理解六边形架构非常有用,但更深入。

长话短说,我将复制相关部分:

其他组件中的触发逻辑

当我们的一个组件(组件 B)需要在另一个组件(组件 A)发生其他事情时做某事时,我们不能简单地从组件 A 直接调用组件 B 中的类/方法因为 A 会被耦合到 B。

但是,我们可以让 A 使用事件调度器来调度应用程序事件,该事件将被传递到任何监听它的组件,包括 B,并且 B 中的事件监听器将触发所需的操作。这意味着组件 A 将依赖于一个事件调度器,但它将与 B 解耦。

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多