pa-monolith-example: 单体中使用端口和适配器的六边形架构案例


本案例github源码是一个六边形架构的单体案例,非微服务案例。

首先,包的形式:
1、把领域和基础设施分开。
领域是你所有的业务逻辑、数据库模型、你的服务、DTOs、异常、端口接口和所有对你的领域来说重要的东西。
有些人可能会争论说,数据库模型应该从领域中排除,因为它是基础设施的一部分。一般来说,我同意这个观点,但通常情况下,如果我们没有使用某种遗留的数据库,我们有现有的结构,我们可以用一种对我们有用的方式来建模。
所以在这样的情况下,我们的业务逻辑定义了一个数据库模型,我们可以在应用程序的领域部分保留这个模型。

2、在基础设施中,你可以保留所有其他的东西,这些东西是你的应用程序与外部世界对话、配置自己、发布API等所需要的。
在我看来,最好的方法是为你的基础设施的不同部分准备一套不同的DTO。
因此,例如,如果你发布了一个REST API,你应该为这个API定义DTO,如果你还发布了一些SOAP API,那么就创建另一套DTOs。
这些DTO也应该与你的领域DTO分开,这样你就不会产生僵化的依赖关系。
我知道,对某些人来说,这可能看起来有点矫枉过正,但它为你在未来节省了很多麻烦,并鼓励你创建只有必要字段的DTOs,这样你就可以少写一些了;)

3、适配器:一个域和另一个域之间的桥梁,我更喜欢通过配置豆来实例化,这样,如果我有不同的适配器可用,我就能很容易地切换它们。另外,像这样的配置类可以很好地概述这个模块所使用的模块。