DDD之3实体和值对象

image.png

图中是一个别墅的模型,表明实体,能够真实的看获得。那么在DDD设计方法论中,实体和值对象是什么呢?程序员

背景

实体和值对象是领域模型中的领域对象,是组成领域模型的基础单元,一块儿实现实体最基本的核心领域逻辑。编程

那么问题来了:微服务

1, 他两在领域模型中的做用是什么?学习

2,在系统中跟代码模型和数据模型是怎么对应的?spa

搞清楚这两个问题很重要。回答问题是须要有知识基础的,先来捋清楚这两个概念的定义和内涵。而后在小结部分咱们来回答这两个问题。设计

实体

定义: DDD中的一类对象,拥有惟一标识符,经历各类状态变动后仍然能够保持一致,对这类对象而言,重要的是延续性和标识,(对象的延续性和标识能够超出软件的生命周期)而非属性。cdn

形态:不一样的设计过程当中,形态不一致。 对象

file

值对象

定义:经过对象的属性值来识别的对象是值对象,它将多个相关属性组合为一个概念总体。它是没有标识符的对象;
**blog

特色:值对象描述了领域中的一件东西,这个东西是不可变的,它将不一样的相关属性组合成了一个概念总体,当度量和描述改变的时候,它能够用另一个值对象替换,并进行相等性比较而不会带来反作用;
**
**
简单来讲: 值对象本质就是一个集合;
**
意义:领域建模过程当中,值对象能够保证属性归类的清晰和概念的完整性;
**
image.png
**
**生命周期

上图中: 若是把省市区地址放在人员实体中,会显得属性不少很零碎。 推荐的作法是把省市区地址构成一个集合,即地址值对象;

file

file

例子:人员地址案例;

file

缺点:若是实体引用的值对象过多,会致使实体堆积一批缺少概念完整性的属性,值对象失去了业务含义,操做起来不方便;

实体PK值对象

file

DDD提倡从领域模型设计出发,而不是先设计数据模型;

小结

首先明确了实体和值对象的概念,以及在不一样的设计阶段的形态。而后经过一个例子展现了实体和值对象的概念和使用;

这是一个从业务模型向系统模型落地过程,考验的是设计能力,咱们应该结合本身的业务场景,选择合适的方法进行微服务设计。

最后我来回答一下在背景部分抛出的两个问题?

1, 实体和值对象在领域模型中的做用是什么?

2,在系统中跟代码模型和数据模型是怎么对应的?

通过上面的分析,个人回答以下:

file

但愿你们都理解好DDD的实体和值对象,设计出高度灵活的代码;

原创不易,关注诚难得,转发价更高!转载请注明出处,让咱们互通有无,共同进步,欢迎沟通交流。
我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各类资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!
李福春持续输出公众号二维码
相关文章
相关标签/搜索