属性ではなく、「同一性」で区別されるオブジェクトを、エンティティと呼ぶ。
例) ある人の趣味(プロパティ)が変わっても同一人物である
エンティティの特徴
可変である
- ユーザーが名前を変えたいときの例で考えると…
- 値オブジェクトは「代入」で値を変更する
- エンティティは「ふるまい」で値を変更する
- ただのセッターではなく、どういう決まりごとがあるかが語られる
同じ属性であっても区別される
- 同姓同名の2人は、属性は同じでも異なる人物
- システムでは同一性を表現するために、「Identity」が用いられる
同一性をもつ
- ユーザ名を変更する前と変更した後で、同一のユーザーと判定される
- 属性ではなく「Identity」でのみ判断される
class User
{
private readonly UserId id; // 識別子
}エンティティ or 値オブジェクトの判断基準
- ライフサイクルを持つか?
- 作成されてから削除されるまで、変化するものはエンティティ
- それ以外はとりあえず値オブジェクトで作ると良い