Skip to content

值对象(Value Object)

值对象是领域驱动设计中描述业务概念的重要元素,它通过属性值而非标识来定义。

汽车生产案例

在汽车制造厂中,值对象可以理解为:

  • 汽车颜色配置(只关心颜色名称和代码,不关心具体哪辆车使用)
  • 发动机规格(如2.0T涡轮增压,只关心参数,不关心具体发动机实例)
  • 轮胎尺寸(如225/45 R18,只关心规格,不关心具体轮胎)

只要属性值相同,我们就认为它们是相同的值对象。

主要特点

  1. 无标识:通过属性值而非ID区分
  2. 不可变:创建后属性不可修改
  3. 可替换:相同属性值的对象可互相替换
  4. 完整性:所有属性构成完整概念

示例

java
// 汽车颜色值对象
class CarColor {
  private final String name;
  private final String code;
  
  // 两个颜色对象只要名称和代码相同,就视为相同颜色
}

// 发动机规格值对象
class EngineSpec {
  private final String type;
  private final double displacement;
  private final boolean turbo;
  
  // 两个规格对象只要类型、排量和涡轮配置相同,就视为相同规格
}

与实体的区别

值对象实体
通过属性值区分通过ID区分
关注特征关注身份
通常不可变可变
可替换不可替换