Entity
設計Wiki
Entityとは、Idによって同一性を保証するクラスのことです。
なぜEntityが必要なのか?
一般的なアプリケーションでは、データが変化するということが頻繁に起こります。
たとえば、Userクラスであれば、名前を変更できるという仕様があるかもしれません。
名前を変更したとしても、そのuserは同一のuserであるべきです。 SNSで名前を変更したら、過去の投稿が自分のものでなくなってしまったら、不便ですよね。
userの情報が変わっても、同じuserであるということを保証するため、idがあります。
idは、一度割り当てられたら変更されないため、同一性を保証することができます。
Entityの実装例
Dart言語だと、次のようなインターフェースをEntityとして定義できます。
interface Entity {
String get id;
}シンプルに、idを返す事ができれば、Entityとして機能します。
型をつけたい場合は、ジェネリクスを利用して、次のような実装が可能です。
interface Entity<T> {
T get id;
}Userであれば、以下のようにUserId型をUserのidとして定義することができます。
class User implements Entity<UserId> {
final UserId id;
User(this.id);
}アンチパターン
Entityの生成は、ビジネスロジックでよく行われるため、idをDBの自動採番などに依存してしまうと、取り扱いが難しいです。
UUIDなどの衝突が起きにくい値をidとして定義することが推奨されます。