领域
从事一种专门活动或事业的范围、部类和部门
领域事件
事件构建和发布、事件数据持久化、事件总线、消息中间件、事件接收和处理
事件构建和发布
基本属性{事件唯一标识、发生时间、时间类型、事件源}、业务属性{记录事件发生那一刻的业务数据,这些数据随事件传输到订阅方,
以开展下一步的业务操作} 二者属性一起构成事件实体,事件实体依赖聚合根。领域事件发生后,事件中的业务数据不再修改,
因此业务数据可以以序列化值对象的形式保存
子域
一个领域可以划分多个子域,每个子域对应一个更小的问题域或业务范围
核心域
决定产品和公司核心竞争力的子域是核心域,它是业务成功的主要因素和公司的核心竞争力
通用域
没有太多个性化的诉求,同时被多个子域使用的通用功能子域是通用域
支撑域
不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域,它就是支撑域
限界上下文
限界就是领域的边界,上下文则是语义环境。通过领域的限界上下文,则可以在统一的领域边界内的统一语言进行交流
实体
有唯一标识符,且标识符在历经各种状态变更后仍保持一致。对这些对象而言,重要的不是其属性,而是其延续性和标识,
对象的延续性和标识会跨越超出软件的生命周期,我们把这样的对象称为实体
值对象
通过对象属性值来识别的对象,它将多个相关属性组合为一个概念整体
聚合
聚合就是由业务和逻辑紧密关联的实体和值对象组合而成,聚合是数据修改和持久化的基本单元,每一个聚合
对应一个仓储,实现数据的持久化。聚合有一个聚合根和上下文边界
聚合根
如果聚合比作组织,那聚合根就是组织的负责人。聚合根拥有实体的属性和业务行为,实现自身的业务逻辑。
作为聚合的管理者,在聚合内部负责协调实体和值对象按照固定的业务规则协同完成共同的业务逻辑。它还是聚合对外的接口人
以聚合根ID关联的方式接受外部任务和请求,在上下文内实现聚合之间的业务协同
DDD分层架构
1、用户接口层
---负责向用户显示信息和解释用户指令,用户包括{用户、程序、自动化测试和批处理脚本等等}
2、应用层
---主要面向用例和流程相关的操作,理论上不应有业务规则或逻辑,位于领域层之上。应用服务是在应用层的,
它负责服务的组合、编排和转发,负责处理业务用例的执行顺序以及结果的拼装,以粗粒度的服务通过 API 网关
向前端发布。还有,应用服务还可以进行安全认证、权限校验、事务控制、发送或订阅领域事件等
3、领域层
---实现核心业务逻辑层,领域模型的业务逻辑主要是由实体和领域服务来实现的,其中实体会采用充血模型来
实现所有与之相关的业务功能。其次,实体和领域对象在实现业务逻辑上不是同级的,当领域中的某些功能,
单一实体(或者值对象)不能实现时,领域服务就会出马,它可以组合聚合内的多个实体(或者值对象),实现复杂的业务逻辑
4、基础层
---基础层是贯穿所有层的,它的作用就是为其它各层提供通用的技术和基础服务,包括第三方工具、驱动、消息中间件、
网关、文件、缓存以及数据库等。比较常见的功能还是提供数据库持久化