首页 > 解决方案 > DDD - java 9 模块项目组织

问题描述

我正在尝试使用 java 9 中的六边形架构(使用 maven 模块)来组织 DDD 项目。是否有任何工作示例已经在生产系统中使用?所以,到目前为止,我只知道如何做到这一点:

在这里,我的domain模块包含所有命令、事件、域模型(带有聚合、实体和值对象)以及存储库接口 + 域服务接口(如果在基础设施上中继)和实现。其他application模块包含应用程序服务,其中我有应用程序的“用例”(协调加载聚合等的简单方法)。

那么这些十六进制架构的适配器呢?每个适配器是否应该在模块中分开(例如mysql-adapter,我可以在哪里实现依赖于基础设施的存储库?另外,为rabbitmq聚合有单独的模块?

任何关于这方面的例子都会很棒!

在此处输入图像描述

标签: javamodulearchitecturedomain-driven-designhexagonal-architecture

解决方案


我正在用 java 9 和 maven 编写一个六边形架构示例。还没写完,等我写完再发。

但到目前为止,我可以告诉你我的方法:

  • 一个六边形模块(不需要其他模块)。对于每个端口,我都有一个模块导出的包。

  • 每个适配器一个模块。需要六边形模块。

  • 一个主模块。需要六边形和所有适配器模块。没有其他模块需要主模块。它构建整个系统并运行驱动程序适配器。

为了为每个驱动端口选择一个适配器,我使用 serviceloader 机制。


在这个例子中我没有使用 DDD,但如果我使用它,结构将是:

  • 六边形将是一个聚合器模块(无源代码),只有 2 个需要传递到应用程序模块和域模块。

  • 应用程序模块需要域模块。它导出作为驱动程序端口(用例)的包,也可能是驱动端口(由驱动适配器实现)。

  • 域不需要模块。它导出作为驱动端口的包。


我推荐 Sander Mark 和 Paul Bakker 的《Java 9 Modularity》一书。

我将发表一篇文章在

https://softwarecampament.wordpress.com/portsadapters/

如果你想在完成后看看我在 github 上的例子。


推荐阅读