DDD学习笔记 - 基础篇(Ⅱ)

 

04 | 实体和值对象:从领域模型的基础单元看系统设计

课程链接:https://time.geekbang.org/column/article/152677

实体和值对象,都是领域模型中的领域对象。

实体:

实体拥有唯一标识符,且标识符在历经各种状态变更后仍能保持一直。对于实体,重要的不是其属性,而是其延续性和标识,对象的延续性和标识会跨越甚至超出软件的生命周期。

业务形态:领域模型中的实体是多个属性、操作或行为的载体。实体和值对象是组成领域模型的基础单元。

代码形态:实体类,包含了实体的属性和方法。DDD中实体类通常采用充血模型。

运行形态:实体以DO(领域对象)的形式存在,每个实体都有唯一的ID。对实体进行多次修改,实体仍然有相同的ID,释然是同一个实体。

数据库形态:DDD先构建领域模型,根据场景构建实体和行为,再将实体映射到数据持久化对象。一个实体可能对应0、1或对各数据库持久化对象,大多数情况下是一对一。用户user与角色role两个持久化对象可生成权限实体,一个实体对应两个持久化对象,这是一对多的场景。

 

值对象:

通过对象属性值来识别的对象,它将多个相关属性组合为一个概念整体。在DDD中是一个没有标识符的对象。

可以将值对象理解为属性的集合。

人员实体原本包括:姓名、年龄、性别以及所在的省、市、县和街道等属性,但是这样显示地址相关的属性就很零碎了。现在可以将省、市、县和街道等属性拿出来构成一个“地址属性集合”,这个集合就是值对象。

业务形态:值对象和实体一起构成聚合。实体是看得到、摸得到实实在在的业务对象,具有业务属性、业务行为和业务逻辑。值对象只是若干个属性的集合,只有数据初始化操作和有限的不涉及修改数据的行为,基本不包含业务逻辑。值对象的属性集用于描述实体的特征。

代码形态:两种。如果值对象是单一属性,则直接定义为实体类的属性;如果值对象是属性集合,则设计为Class类,Class将具有整体概念的多个属性归集到属性集合,这样的值对象没有ID,会被实体整体引用。

看下代码,person

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值