DDD相关术语总结
简述
在学习DDD的过程中,会碰见很多术语,以及英文缩写,不同资料中对概念的解释也有偏差,这里统一总结一下我对DDD相关的术语的个人理解
相关术语包括:DTO、DO、Entity、BO、VO、PO、ACL、Repository规范、领域、子域、核心域、领域服务、聚合、聚合根、限界上下文、领域事件
DTO
Data Transfer Object 数据传输对象,用于不同服务或服务不同分层之间的数据传输,属于DDD里的应用层。
DO
Data Object 数据对象,其属性和数据库字段名一一对应,属于DDD里的Infrastructure层
(有的资料是Domain Object 领域对象,这里Domain Object的概念更接近于下面的Entity和value object)
Entity
实体类,业务的业务模型,它的字段和方法应该和业务语言保持一致,和持久化方式无关,属于DDD里的Domain层
BO
Business Object 业务对象,和上面的Entity概念一致
PO
Persistence Object 持久化对象,和上面DO概念一致
VO
Value Object 值对象,用来描述Entity对象的状态,通常是数据的集合,没有行为
(领域对象包含了业务对象和值对象)
ACL
Anti Corruption Layer 防腐层,指DDD中通过端口-适配器模式弄出来的中间层接口,用于隔离业务逻辑和第三方库的具体实现
Repository规范
Repository规范是特殊的ACL,特指隔离的是业务和数据持久的具体实现
领域
领域是一个比较大的概念
在《实现领域驱动》书中,领域就是一个组织所做的事情以及其包含的一切
个人理解为研究业务问题中的问题域,我们会在这个领域建立领域模型
子域
领域可以进一步划分为子领域。我们把划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或更小的业务范围
举个例子,比如保险领域,我们可以把保险细分为承保、收付、再保以及理赔等子域
核心域
决定产品和公司核心竞争力的子域,要投入最牛的程序员进行开发核心域
聚合
聚合是领域对象的显式分组,旨在支持领域模型的行为和不变性,同时充当一致性和事务性边界
个人理解:聚合就是实体对象和值对象的集合,本质就是建立了比对象粒度更大的边界,聚合了那些紧密联系的对象,形成了一个业务上的整体,外界通过聚合根作为交互的入口
聚合根
聚合根是实体本身,拥有数据和行为,聚合根管理其所在的聚合,同时负责该聚合和外部的交互
领域服务
当业务逻辑跨领域对象时,则需要领域服务整合两个领域对象的业务逻辑
但要适度使用,过度的话业务逻辑都在领域服务里,那就又变成贫血模型了
限界上下文
限界就是领域的边界,而上下文则是语义环境或者说业务的整个流程,通过领域的限界上下文,我们就可以在统一的领域边界内用统一的语言进行交流
个人理解:限界上下文是用来划分领域对象的,每一个模型概念,包括它的属性和操作,在边界之内都具有特殊的含义,而领域模型需要准确的反映通用语言,所以就需要限界上下文来划分领域对象
领域事件
领域事件就是在领域层发生的一些事件,如果发生某种事件后,会触发进一步的操作,那么这个事件很可能就是领域事件
详细请看:https://juejin.cn/post/6938704749739016228
待补
支持子域、通用子域、策略模式、领域之间的上下游
References
https://juejin.cn/post/7024640082082529317#heading-4
https://blog.csdn.net/muzizongheng/article/details/108871808
https://mp.weixin.qq.com/s?__biz=MzAxNDEwNjk5OQ==&mid=2650406692&idx=1&sn=4a4ac4168299d8ca1905a4f457ae4c59&chksm=8395373cb4e2be2a2d066a5ea4e631fd6270e969ce61883b488f61c1ce33fbc0b362ec9cbf7b&scene=21#wechat_redirect
https://zhuanlan.zhihu.com/p/359672528
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术