ドメイン駆動設計におけるエンティティはドメインモデルを実装したドメインオブジェクト。
値オブジェクトもドメインモデルを実装したドメインオブジェクト。
// 両者はドメインモデルを実装したドメインオブジェクト
エンティティ == 値オブジェクト???
両者はイコールではなく、同一性によって識別されるかどうかの違いがある
同一性とは
人間で例えると、人間には名前、身長、体重、趣味などさまざまな属性がある。
これらの属性はさまざまな要因によって変化するもの。
例えば、年齢は誕生日を迎えると年を重ねる可変な属性。
ただ、誕生日を迎えて年を重ねた当事者は誕生日以前と以後で別人になりえるかということ。
同じように体重や身長が増減したからといってその人が別人になることはない。その人がその人たる所以は
属性とは無関係ところにあり、同一性を担保する何かが存在することを示唆している。
ソフトウェアシステムでも同じように属性で区別されないオブジェクトが存在する。
システムのユーザーという概念がその典型
システムを利用する際にユーザー登録を行い、個人情報をユーザー情報として登録する。
登録後にユーザー名を変更した場合、ユーザー情報が変更されただけで、ユーザー自体が変更されたわけではない。ユーザーは属性ではなく同一性により識別されているから(idなど)
エンティティは同一性によって識別される
エンティティは属性ではなく同一性によって識別されるオブジェクト。
これとは反対に、同一性ではなく属性によって識別されるオブジェクトも存在する。それが値オブジェクト。
エンティティと値オブジェクトは共にドメインモデルを実装したドメインオブジェクトであるが、その性質は異なる。エンティティの性質は下記の3つ