DDD / Entities (a.k.a. Reference Objects)


Entities (a.k.a. Reference Objects) (P89)

要約

  • [文脈の説明]
    • 多くのオブジェクトは本質的に、属性ではなくむしろ一貫性や同一性によって定義される
      ***
  • [問題についての説明]
    • 例:訪ねたことも無いアパートの管理人から、部屋を壊した損害賠償の訴訟を起こされた。
      • 裁判所は私の名前と現住所から私を特定した。
      • 私は人違いだと説明したが、原告は信じようとしなかった。
      • 電話帳が私の説明を証明した。
      • 原告は数年前の電話帳を確認し、私と同名の人間が続けて記載されていることを発見し、謝罪して訴訟を取り下げた。
    • コンピュータは才略に長けてはいない。
    • 誤ったidentityの使用はデータ汚染とプログラムエラーを導く。
    • 「人」を例にして考える。
      • 誕生から死、そして死後まで、人のidentityは続く。
      • 物理的な属性は永続しない。外見・名前・財政状況等は変化する。
      • しかしidentityは持続している

  • 問題サマリ
    • 対象のモデル化は、オブジェクトの属性に焦点を当てる傾向がある。
    • しかし、ENTITYの基本概念は様々な状態を通り抜け、縫うように通る抽象的な連続事象である。
    • オブジェクトは主としてそれらの属性によって定義されない。
    • 属性は時の流れと共に異なった表現となる。
    • あるときは、属性が異なっていてもオブジェクトとしてマッチしなければならないし、またあるときは、同じ属性でも異なるオブジェクトとして区別しなければならない。
    • identityの判別ミスは、データ汚染に繋がる。

  • [問題の解決方法についての説明]
    • identityによって定義されたオブジェクトをENTITYと呼ぶ。
    • ENTITYはその内容を根本的に変えることが出来るが、それでも連続的に存在し続けなければならない。
    • ENTITYを追跡できるようにidentityを定義しなければならない。

  • Therefore:
  • 解決方法サマリ
    • オブジェクトが属性よりidentityによって識別されたら、これをモデルの定義とする。
    • 属性で一意性を求めるような要求には注意する。
    • ユニーク性を保証するようなシンボルをモデルに与える。
    • モデル内では、自身の同一性を定義する。

Modeling ENTITIES

  • ENTITIESの最も基本的な責任は、振る舞いが明確であって、予測できるように連続を確立することである。
  • 概念に不可欠の振る舞いと、その振る舞いに必要な属性だけを加える。
  • それ以外は、コアENTITYに関連している他のオブジェクトに委譲する。
  • これらのいくつかが、他のENTITIESとなるだろう。
  • VALUE OBJECTになる場合もあるだろう。
  • ENTITIESは、それらが所有しているオブジェクトの操作を調整することによって責任を遂行する傾向がある。

Designing the Identity Operation

  • 各ENTITYは、どのように定義されてもシステムの中で特有となるように特定属性を保証しなければならない。
  • オブジェクト指向言語の「identity」操作は、ENTITYのidentity定義には、もろすぎる。
  • DBから同じデータを取得する、リモートシステムでオブジェクトを送受信する等の操作で、言語のオブジェクトidentityは変わってしまい、永続化されない。
  • クラスの中で、ユニークなシンボル(数や文字列等)を付与し、そのIDシンボルを保存することでidentityに対応できる。
  • そのidentityは不変であり、変化させてはいけない。
  • IDはシステムによって自動的に作成することができる。
  • IDが自動作成されるとき、ユーザはそれを見る必要はないかもしれない。
  • IDの一意性はシステムの境界を越えて通用しなければならないことがある(アメリカの社会保険番号)

担当者のつぶやき

  • identity=身元って意味なんですね・・・

みんなの突っ込み


既に解決済と思いますが、初見の人の為にコメント残してます。
一言でいえば「識別子」なので「身元」でも良いと思います。正確には
p92 L1「Identity is a subtle and meaningful attribute of ENTITIES・・・」>identity=身元って意味なんですね・・・

読書会当時、読んでこなかったので、ここから復習しているのですが、
p91 L5「Some Objects are not defined primarily by their attributes
p91 L10「An Object defined primarily by its identity is called ENTITY
p91 L22「An Entity is anything that has continuity through a life cycle and distinctions independent of attribute
だけで良いじゃん、Evansは本当に冗長だなーって思いました。「IDの作り方は、本書の内容を越える」と言って教えてくれないし(笑)-- 池田?2008-12-27 (土) 15:23:07

まとめ (議事録)