🪪
DDDドメインモデリングオブジェクト指向 2026年4月4日

エンティティ

📁 概念 👁 -- 閲覧

エンティティ

定義

エンティティ(Entity)とは、その属性ではなく**同一性(Identity)**によって識別されるドメインオブジェクト。同じ属性を持つ別々のオブジェクトがあったとしても、IDが異なれば別のエンティティである。

// 値オブジェクトとの違い
Money(1000, "JPY) == Money(1000, "JPY")  // 属性が同じ = 同じもの(値オブジェクト)

User(id=1, name="田中") != User(id=2, name="田中")  // IDが違う = 別人(エンティティ)

エンティティは時間とともに状態が変化する(ライフサイクルを持つ)。ユーザーはメールアドレスを変更しても、同じユーザーとして識別される。

なぜ重要か

エンティティと値オブジェクトを混同すると:

  • 同一性の比較ロジックが散在し、バグの温床になる
  • 変更履歴の追跡が困難になる
  • 「どの状態が最新か」の管理が曖昧になる

エンティティを明示的に設計することで、識別・追跡・変更が一貫したロジックで管理できる。

適用場面

  • ライフサイクルを持つ概念(注文、ユーザー、商品、タスク)
  • 属性が変わっても「同じもの」と識別する必要があるもの
  • 変更履歴・監査ログを保持する必要があるもの

値オブジェクトとの選択基準

エンティティ値オブジェクト
識別IDで識別属性の等価性で識別
変更状態が変化する不変(変更=新しいインスタンス)
共有同じIDを複数箇所から参照コピーして渡す
ユーザー、注文、商品金額、住所、日付範囲

関連概念

出典

実践ドメイン駆動設計(Vaughn Vernon)第5章