mizoguche.info

エンティティ - エリック・エヴァンスのDDD読んだメモ

(DDDの文脈において)エンティティとは主に同一性によって定義されるオブジェクトのこと。

TL; DR

  • エンティティをシンプルにするため、振る舞いや属性を関連するオブジェクトに移すことを検討する
  • エンティティの各オブジェクトを識別し同一性を確認できるようにする
  • エンティティは所有するオブジェクトの操作を調整することで責務を果たす

同一性

  • 多くのオブジェクトは本質的に、その属性によってではなく、連続性と同一性(identity)によって定義される
    • 人は、名前や住所ではなく、同一性によって識別される
    • 名前や住所は識別するための手段として有用ではあるが、同姓同名の人物など、それだけでは識別できないこともある

エンティティに求められること

  • クラスの定義をシンプルに保つこと
  • ライフサイクルの連続性と同一性にプライオリティを置くこと
  • 各オブジェクトを識別する手段を定義すること
  • 各オブジェクトに対して結果が一意となることが保証される(比較などの)操作を定義すること

エンティティをモデル化するときに検討すること

  • エンティティオブジェクトの定義は最も本質的な特徴にまで削ぎ落とすこと
    • 本質的な特徴: エンティティを識別するもの、検索で突き合わせる際に使用されるもの
  • 振る舞いと属性を、コアとなるエンティティに関連した他のオブジェクトへ移動できないか検討すること
    • 他のオブジェクト: 別のエンティティや値オブジェクト
  • エンティティは所有するオブジェクトの操作を調整することによって責務を果たす

顧客エンティティの例

  • 顧客IDは唯一の識別子
  • 名前は同一性を定義しないが、同一性を定義する手段の一部として使用されることが多いのでエンティティが持つ
  • 製品カテゴリや平均販売量は同一性と関係しないので、関連するオブジェクトを追加して移す
  • 電話番号や住所は検索や突き合わせに使用されやすいのでエンティティが持つ
  • 顧客が別々の目的のために多くの電話番号を持っていれば同一性と関係しないので、販売連絡先オブジェクトなどに移すべき
4798121967
このエントリーをはてなブックマークに追加