値オブジェクト(Value Object)
定義
ビジネス上の意味を持つ値を、プリミティブ型ではなく専用クラスで表現するオブジェクト。 同一性(ID)ではなく値の内容で等価性を判断し、不変(immutable)であることが特徴。
例:「金額」「メールアドレス」「電話番号」は文字列や数値ではなく独自の型を持つ。
なぜ重要か
- プリミティブ型では表現できない業務上のバリデーション・制約を型に閉じ込められる
- 同じ
String型でも「氏名」と「メールアドレス」は混同できなくなる - 値オブジェクトのメソッドが業務ロジックの置き場所になる
適用場面
- 「〜は〜文字以内」「〜の形式でなければならない」という制約がある値
- 計算・変換が生じる値(金額の加算、日付の差分など)
- 複数フィールドがまとまって一つの概念を成す値(住所 = 都道府県 + 市区町村 + 番地)
関連概念
- 型駆動設計(値オブジェクトは型駆動設計の実現手段)
- 不正な状態を型で表現不可能にする
- プリミティブ執着(アンチパターン)
出典
現場で役立つシステム設計の原則(増田亨)第1〜2章