0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DDD Entityの同一性 ドメイン駆動が指向するObject

Posted at

Entity

多くのオブジェクトは、本質的に、その属性によってではなく、連続性と同一性(identity)によって定義される
エリックエヴァンスのドメイン駆動設計 翔泳社 2011 より

ObjectとしてのEntity

DDDのEntity概念は非常に優れた抽象である。その要諦は「同一性」である。
「同一性」の認識が必要なモノがEntity(Object)である。

これにより、Objectが実体(モノ)から解放される。
「顧客を登録する」という機能を考えると、顧客は同一性の認識の必要があるためEntityであるし、「顧客を登録する」という実行自体も同一性の認識の必要(ログ保存など)があればEntity(Object)となる。

idが付与されただけのObject。とてもシンプル。※extends Objectは暗黙だから不要

class Entity extends Object {
    public final int id;

    public Entity(int id) {
        this.id = id;
    }
    
    @Override
    public boolean equals(Object obj) {
        // omit
    }

    @Override
    public int hashCode() {
    	// omit
    } 
}

連続性

連続性というのは、永続化の必要を指す。DBその他のストレージへの保管の要請である。

これも重要。オブジェクトを設計したのちに永続化(DB)するのである。永続化(DB)はオブジェクトに従うのである。

DDDは何が保存されるべきか、何を呼び出すべきかといったデータ指向設計とは相いれない。

同一性からみた集約

DDDの集約は、いわばEntityの主従(包含)関係の構築である。境界の設定といっても同義である。
自動車でいうと、自動車はEntityとなり、タイヤはある自動車の内側においてEntityである。別の自動車から見て、また、修理業者から見て自動車を通してのEntityである。
ここに、タイヤは自動車に集約される。(外から見て、タイヤ自体の識別は不要。)
ただし、販売される前のタイヤは単独のEntityである。ここに設計の妙があるし、ユビキタス言語の利用を促す動機がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?