Value Object
Value Objectとは
Value Objectは、識別子ではなく、持っている値の組み合わせによって意味と等価性が決まるドメインモデルの要素です。独立したライフサイクルを持たず、原則として生成後は変更しません。
Value Objectにすべき基準は?
推奨
値の組み合わせで意味と等価性が決まり、独立したライフサイクルを持たない概念をValue Objectにする。
なぜ
検証と振る舞いを値の型へ閉じ込めると、不正な値や単位の取り違えを境界で防げます。
判断基準
- 構成する値が同じなら交換可能
- 生成後は不変にできる
- 金額・期間・住所など固有のルールがある
BAD
価格をnumber、通貨をstringとして別々に引き回し、各呼び出し元で検証する。
GOOD
Moneyが金額と通貨を保持し、異なる通貨同士の加算を拒否する。
図:AGGREGATEの変更経路
外部のユースケース
変更を依頼する
AGGREGATE BOUNDARY
Aggregate Root
不変条件を守る入口
Entity
同一性で追跡する
Value Object
値で等価性を決める