前言
DDD可落地的架构长什么样都行,只要符合DDD的设计思想即可,但是不管怎样落地,分层结构中总会有Domain层。下面是我们落地的架构
DDD可落地架构分层
我们的架构参照了洋葱架构模型,洋葱架构模型依赖方向由内到外,即外边的层依赖里面的层。Domain层:
洋葱最里层,本层包含核心的业务逻辑,这套逻辑一般和某个业务核心赚钱逻辑直接相关,并且改变频率最低,属于稳定被依赖的层。我们在代码规范中要求Domain层的代码不允许依赖任何其他外部层,包括spring、mysql等,本层代码只写纯Java代码,如果有需要存储等,可以利用依赖倒置原则,依赖接口,实现在外层实现。这样可以保证Domain层无论在哪里都可以被应用。
Domain层包括DDD战术设计的 聚合、实体、值对象、领域服务、领域事件、工厂、仓库等对象。ApplicationService层:
Domain的直接消费层,本层要很薄,服务方法里是业务流,即依赖Domain的对象的业务逻辑实现一套流程,编排这些业务逻辑。先做什么、后做什么、生成聚合Id、操作完之后保存聚合等。
本层是Domain的一个边界,外部系统想要与Domain层交互必须通过Application层翻译。
本层包括 DTO、DTOAssembler、Command、CommandHandler、ApplicationService等对象Infrastructure层
基础设施层,负责实现领域层的接口,如RepositoryImpl,负责mysql、spring、redis等具体技术细节的实现,本层是洋葱较外层Interface层
我们的技术架构里拆分出了interface层,这层的作用是给外部系统如前端等提供入口api,如controller,消息队列消费者、定时器等实现,本层消费Application层,利用Application的业务流完成自己的业务。