書籍「ドメイン駆動設計入門」
値オブジェクト
システム固有の「値」としてのオブジェクト
属性やメソッドを持つ
属性によって識別される (等価性によって比較できる)
「値」だから、不変で交換可能
モチベーション
表現を高める
代入する値に制約を課す
誤った代入を防ぐ
ロジックを分散させない
例
時間
属性「年」「月」「日」「タイムゾーン」等によって表現される値である
toString等の共通のロジックを持つことができる
エンティティ
属性ではなく同一性によって識別される
属性が変化する場合もある
属性が同じでも区別される
属性が変わっても同一性は維持される
同一性の実体としてのIDがある
エンティティにするか、値オブジェクトにするか
ライフサイクルが存在するものは、エンティティ
作成され、変更を受け入れ、終いには削除される、というサイクルを有している
そういったオブジェクトは、可変である必要がある
ライフサイクルを持たない/無視できるものは、値オブジェクト
不変でいいものは不変として扱うべきである
可変なオブジェクトは、ふるまいの正確さに悪影響を与える
エンティティと値オブジェクトは「ドメインオブジェクト」と表現できる
ドメインモデルを表現
ドキュメント性を高める
ドメインの変更によるコードの修正が最小限に抑えられる
ドメインサービス