Explicit Architecture(清晰架构)整合六边形架构和洋葱架构

让架构清晰的展现出来

用户界面,这里的代码就是为了适配某个用例的传达机制;
用户核心,这里的代码就是用例和领域逻辑;
基础设施,这里的代码就是为了适配应用核心所需要的工具、库。
Explicit Architecture(清晰架构)整合六边形架构和洋葱架构_第1张图片
因此,在源码的目录下面,我们可以创建三个文件夹来提现三类代码。这个三个文件夹分别表示三个命名空间,核心代码对用户界面和基础设施是可见的,这就是由外向内的依赖方式。

用户界面

在一个web应用中通常有多套API。例如,一套给客户端使用的REST API,还有一套给第三方应用使用的web-hook,业务还有一套需要维护的遗留SOAP API,或者还有一套给全新移动应用的GraphQL API…
Explicit Architecture(清晰架构)整合六边形架构和洋葱架构_第2张图片
用户界面主要有三大类:API,CLI,网站。所以我们可以在UserInterface根命名空间下为每个类别创建一个文件夹,如上图所示。

核心

在Core命名空间下,按照最粗粒度来分成三类代码:组件(component)、共享内核(shared kernel)、端口(port)。

组件

在component命名空间下,为每个组件创建一个命名空间,然后在各组的命名空间下,我们再分别为应用层和领域层创建空间。在application和domain命名空间下,我们会将全部的类放在一起,随着类的不断增加,我们在考虑分组。
Explicit Architecture(清晰架构)整合六边形架构和洋葱架构_第3张图片
这时候我们就要考虑按照业务主体(收据、交易、对账…)分组还是按照技术作用(仓库、服务、值对象…)分组。

端口

和infrastructure命名空间一样,port命名空间里核心使用的每一种工具都有一个命名空间,核心通过这些代码才能使用底层的工具
Explicit Architecture(清晰架构)整合六边形架构和洋葱架构_第4张图片
这些代码会被适配器使用,他们的作用就是端口和真正的工具之间的转换。这种形式简单得不能再简单了,端口就是一个接口,但是很多时候它还需要值对象、DTO、服务、构建器、查询对象甚至是仓库。

共享内核

我们把组件之间共享的代码放到shared kernel命名空间下。
Explicit Architecture(清晰架构)整合六边形架构和洋葱架构_第5张图片

基础设施

和用户界面一样,我们的应用使用了多种工具(库和第三方应用),例如ORM、消息队列、SMS提供商。因此,在infrastructure命名空间里,就需要创建(ORM、MessageQueue、SmsClient),然后为每种工具添加对应的适配器。
Explicit Architecture(清晰架构)整合六边形架构和洋葱架构_第6张图片
最终的代码结构就是:
Explicit Architecture(清晰架构)整合六边形架构和洋葱架构_第7张图片

你可能感兴趣的:(架构设计,项目架构,java,软件架构师,企业架构)