概况
DDD是真正从业务角度出发,为全世界绝大部分做纯业务开发提供的一整套架构设计思路。
DDD落地方案
项目模块
types
types模块是api层,是保存可以对外暴露的domain primitives的地方,domian primitives因为是无状态的逻辑,可以对外暴露,所以经常被包含在对外的api接口中,需要单独成为模块,types模块不依赖任何类库,纯pojo
domian
domian模块是领域服务层,包含有状态的Entity、领域服务domian service以及各种外部依赖的接口(repository、acl-防腐层、中间间)等,domian模块仅依赖types模块。
application
application模块服务编排层,依赖domain模块
infrastructure
infrastructrue模块是基础设施层,包含了persistence、messaging、external等模块,persistence模块包含数据库dao的实现,包含data object、orm mapper、entity到DO的转化类等,依赖domain模块,做persistence、external的实现
web/adapter
web/adapter是适配层,外部调用http、rpc、mq统一入口
start
start模块是springboot的启动类
type
exception
types
domain
entity - 领域实体
service - 领域服务
external - 外部接口实现
messageing - 消息
repository - 数据库持久层
exception -
application
infrastructure
业务规则的归属到底是对象的 - 行为,还是独立的 - 规则对象
业务规则之间的关系如何处理
通用行为应该如何复用和维护
组件化
行为抽离
数据驱动
数据、状态、行为分离
开闭原则:对扩展开放,对修改关闭
DDD六边形架构落地规范
1、架构示意图
2、分层说明
基础设施层:最底层,包括无业务逻辑的工具类,比如日期处理、json解析等、所有上层都依赖此层,但此层不可依赖其他层
适配器层:内外部系统交互层,主要包括各种与外部交互的实现类
应用层
领域层
3、依赖约定
单向依赖原则为最高原则,底层不可依赖高层,内层不可依赖外层
所有层都依赖基础设施层
适配层依赖其他所有层
应用层依赖除适配层外的其他所有层
领域层仅依赖基础设施层
依赖方向的实现