首页/开发/系统分析与架构设计速查/实体与值对象(Entity / Value Object)
需求分析与建模61 条

实体与值对象(Entity / Value Object)

实体由身份标识区分(订单号相同即同一订单),值对象由属性值区分且不可变(金额、地址、时间区间);值对象不可变可安全共享并简化并发。

对比

维度实体值对象
判别有生命周期与身份只由值定义
可变性状态随时间变化创建后不可变
示例订单、客户、设备金额、坐标、日期区间
相等性按标识比较按全部属性比较
把金额、单位、货币做成值对象并封装校验,可以消灭大量散落的参数校验代码。

易错点

  • 用数据库主键做实体相等判断,未落库对象比较出现意外结果
  • 值对象提供 setter,被多方共享后出现难以追踪的状态变化

数据来源与参考

  • Eric Evans《Domain-Driven Design》
  • Vaughn Vernon《Implementing Domain-Driven Design》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌