值对象(Value Object)
值对象是领域驱动设计中描述业务概念的重要元素,它通过属性值而非标识来定义。
汽车生产案例
在汽车制造厂中,值对象可以理解为:
- 汽车颜色配置(只关心颜色名称和代码,不关心具体哪辆车使用)
- 发动机规格(如2.0T涡轮增压,只关心参数,不关心具体发动机实例)
- 轮胎尺寸(如225/45 R18,只关心规格,不关心具体轮胎)
只要属性值相同,我们就认为它们是相同的值对象。
主要特点
- 无标识:通过属性值而非ID区分
- 不可变:创建后属性不可修改
- 可替换:相同属性值的对象可互相替换
- 完整性:所有属性构成完整概念
示例
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区分 |
关注特征 | 关注身份 |
通常不可变 | 可变 |
可替换 | 不可替换 |