ページ一覧を開く

Value Object

Value Objectとは

Value Objectは、識別子ではなく、持っている値の組み合わせによって意味と等価性が決まるドメインモデルの要素です。独立したライフサイクルを持たず、原則として生成後は変更しません。

Value Objectにすべき基準は?

推奨

値の組み合わせで意味と等価性が決まり、独立したライフサイクルを持たない概念をValue Objectにする。

なぜ

検証と振る舞いを値の型へ閉じ込めると、不正な値や単位の取り違えを境界で防げます。

判断基準

  • 構成する値が同じなら交換可能
  • 生成後は不変にできる
  • 金額・期間・住所など固有のルールがある

BAD

価格をnumber、通貨をstringとして別々に引き回し、各呼び出し元で検証する。

GOOD

Moneyが金額と通貨を保持し、異なる通貨同士の加算を拒否する。

図:AGGREGATEの変更経路

外部のユースケース

変更を依頼する

AGGREGATE BOUNDARY

Aggregate Root

不変条件を守る入口

Entity

同一性で追跡する

Value Object

値で等価性を決める

外部は内部オブジェクトを直接変更せず、Aggregate Rootへ意図のある操作を依頼します。Rootが全体のルールを確認してから変更します。