代码落地
在理解了DDD战术设计
中的那些概念以后,就可以试着整合代码了。
对于架构师或者PM
来说,最核心的部分是战略设计
。但对于工程师们来说,最核心的部分其实是战术设计
以及它之后的代码落地
,因为Talk is cheap, Show me the code
。
在这一步,就可以充分考虑如何将那些DDD的概念变成可执行的代码了。
虽然在DDD的代码落地方案中,有六边形架构、洋葱架构、整洁架构、CQRS架构和基于分层
的COLA架构这几种不同的选择,但个人认为相对比较友好且容易上手的架构当属COLA。
分层架构
分层架构
将战术设计
中涉及到的DDD概念全部划分到了四个不同的层次中。

基础设施层(infrastructure)
:包括负责实现数据层持久化的资源库(repository)
和用来组装各种领域模型的工厂(factory)
。接口层(interface)
:它直接与外界进行交互,由控制器(controller)
、服务间调用(rpc,例如,dubbo或openfeign)
和监听器(listener)
组成,它会把收到的请求或监听到的事件传递给其他层来执行。应用层(application)
:通过业务流程编排(service)
,将各种业务类、对象和方法按照业务语义组织起来,拼装成完整的可执行业务流程。领域层(domain)
:用聚合(aggregate)
、实体(entity)
、值对象(value object)
、领域事件(domain event)
、领域服务(domain service)
、命令(command)
、查询(query)
、业务组件(component)
这些东西,把业务模型
、业务流程
和业务语义
以代码的方式还原出来,让技术尽量与业务贴合。
这四层自顶向下,逐级依赖。
COLA架构
COLA架构在分层架构
的基础上加入了一些通用组件。


COLA的作者也发了一些关于COLA架构的实践,可以读一读。
架构整合
现在,再回过头来看一看怎么把COLA用到自己的项目中。
可以根据COLA的设计思想重新调整一下分层架构
中的组件。
基础设施层(infrastructure)
:除了资源库(repository)
和工厂(factory)
,还增加了用来调用外部接口的api
和其他自定义的业务组件,例如,converot(转换器)
。接口层(interface)
:无变化。接口层(interface)
:将原本属于领域层
的命令(command)
、查询(query)
转移到这里面来,执行对其他服务的rpc
调用。应用层(application)
:将原本属于领域层
的命令(command)
、查询(query)
转移到这里面来,配合业务流程编排(service)
实现对业务的拼装。领域层(domain)
:除了没有了命令(command)
、查询(query)
,其他没变化。

可以直接执行官方给出的脚本。
> cd /home/work
> mvn archetype:generate \
-DgroupId=com.alibaba.demo \
-DartifactId=demo-web \
-Dversion=1.0.0-SNAPSHOT \
-Dpackage=com.alibaba.demo \
-DarchetypeArtifactId=cola-framework-archetype-web \
-DarchetypeGroupId=com.alibaba.cola \
-DarchetypeVersion=4.3.1
或者也可以先下载源码然后再创建应用。
# 下载源码到本地
> cd /home/work
> git clone https://github.com/alibaba/COLA.git
# 安装 cola-archetype
> cd /home/work/cola/cola-archetypes
> mvn install
# 安装 cola-components
> cd /home/work/cola/cola-components
> mvn install
# 创建应用
> cd /home/work
> mvn archetype:generate \
-DgroupId=com.alibaba.demo \
-DartifactId=demo-web \
-Dversion=1.0.0-SNAPSHOT \
-Dpackage=com.alibaba.demo \
-DarchetypeArtifactId=cola-framework-archetype-web \
-DarchetypeGroupId=com.alibaba.cola \
-DarchetypeVersion=4.3.1
安装完成后可以直接运行项目。
# 运行应用
> cd /home/work/demo-web
> mvn install -DskipTests
> mvn spring-boot:run
或者将项目导入到IDEA中,这样就可以看到完整的样例代码。
根据整合后的结果,最终得到DDD的代码落地方案。


DDD也好,COLA也好,都只是思想和工具,该怎么做才能更有利于业务开发和运营,决定权在每个工程师自己手上。
感谢支持
更多内容,请移步《超级个体》。