本文主要是介绍Explicit Architecture(清晰架构)整合六边形架构和洋葱架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
让架构清晰的展现出来
用户界面,这里的代码就是为了适配某个用例的传达机制;
用户核心,这里的代码就是用例和领域逻辑;
基础设施,这里的代码就是为了适配应用核心所需要的工具、库。
因此,在源码的目录下面,我们可以创建三个文件夹来提现三类代码。这个三个文件夹分别表示三个命名空间,核心代码对用户界面和基础设施是可见的,这就是由外向内的依赖方式。
用户界面
在一个web应用中通常有多套API。例如,一套给客户端使用的REST API,还有一套给第三方应用使用的web-hook,业务还有一套需要维护的遗留SOAP API,或者还有一套给全新移动应用的GraphQL API…
用户界面主要有三大类:API,CLI,网站。所以我们可以在UserInterface根命名空间下为每个类别创建一个文件夹,如上图所示。
核心
在Core命名空间下,按照最粗粒度来分成三类代码:组件(component)、共享内核(shared kernel)、端口(port)。
组件
在component命名空间下,为每个组件创建一个命名空间,然后在各组的命名空间下,我们再分别为应用层和领域层创建空间。在application和domain命名空间下,我们会将全部的类放在一起,随着类的不断增加,我们在考虑分组。
这时候我们就要考虑按照业务主体(收据、交易、对账…)分组还是按照技术作用(仓库、服务、值对象…)分组。
端口
和infrastructure命名空间一样,port命名空间里核心使用的每一种工具都有一个命名空间,核心通过这些代码才能使用底层的工具
这些代码会被适配器使用,他们的作用就是端口和真正的工具之间的转换。这种形式简单得不能再简单了,端口就是一个接口,但是很多时候它还需要值对象、DTO、服务、构建器、查询对象甚至是仓库。
共享内核
我们把组件之间共享的代码放到shared kernel命名空间下。
基础设施
和用户界面一样,我们的应用使用了多种工具(库和第三方应用),例如ORM、消息队列、SMS提供商。因此,在infrastructure命名空间里,就需要创建(ORM、MessageQueue、SmsClient),然后为每种工具添加对应的适配器。
最终的代码结构就是:
这篇关于Explicit Architecture(清晰架构)整合六边形架构和洋葱架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!