您当前的位置:首页 >> 最新 >  >> 
焦点热文:领域驱动应用架构实践
来源: Coder蝉      时间:2023-06-16 17:26:31

一个合适的应用架构不仅能促使项目朝着好的方向发展,易于维护,也能指导团队成员有效协作。


(资料图片)

DDD是站在领域的角度来驱动应用架构的落地,接下来将介绍一种落地方案。

架构分层

首先在架构层次方面,在遵循DDD的分层架构模式的同时,结合六边形架构的形态,形成一种新的分层架构模式。如下所示:

每个层次的职责如下:

适配器层(adapter),是系统流量的入口,将请求分发给应用层去处理具体应用逻辑。该层涵盖业务接口请求、批处理、消息等。门面层(facade),作为系统的门面,用于表达系统对外暴露的能力。应用层(application),是系统的应用逻辑编排层,用于做跨系统或者跨聚合的业务编排,不表达核心控制能力。领域层(domain),作为领域驱动架构的内核,其承载的是系统的核心模型、规则与服务,是整个系统的大脑所在。基础设施层(infrastructure),是系统的基座,其支撑着领域层;该层的定位主要是系统基础能力(缓存、存储等)、下游支撑系统的集成、领域能力的防腐等。


架构依赖

在工程应该架构上,各组件模块之间的依赖交互如下:

工程结构

在形成架构的可落地模式后,工程落地上也是很重要的,其将会影响项目的维护性以及编码落地阶段的执行策略。下面来看一种可落地的工程结构形态:

.|-- app|   |-- adapter|   |-- application|   |-- domain|   |-- facade|   `-- infrastructure|       |-- acl|       |-- dal|       |-- integration|-- bootstrap|-- conf`-- test

每个目录的含义如下:

app: 工程应用存放代码的目录,其中子目录是前面架构分层中所说的不同模块bootstrap:应用的启动器,以及应用除环境之外的配置信息conf:环境相关的配置信息test:工程相关的测试代码

在工程结构上,将基础设施层按职责进行了拆分:

dal: 数据库交互模块integration:系统集成模块,比如与下游系统的集成,其他基础能力的集成acl:系统防腐层,领域与基础设置之间的防腐隔离


架构使用

使用如下maven命令,替换groupId、artifactId、version、package等参数为你期望的值即可,架构脚手架的版本(ddla-archetype.version)可直接使用groupId(ddla-archetype)在maven仓库搜索。

mvn archetype:generate \    -DgroupId=com.lazycece.ddlademo \    -DartifactId=ddlademo \    -Dversion=1.0.0-SNAPSHOT \    -Dpackage=com.lazycece.ddlademo \    -DarchetypeArtifactId=ddla-archetype \    -DarchetypeGroupId=com.lazycece.ddla \    -DarchetypeVersion=${ddla-archetype.version}

开源地址

https://github.com/lazycece/ddla

标签:

X 关闭

X 关闭