ドメインモデルにおける集約ルートには、グローバル空間で一意なIDが必要?
ドメインモデル(ドメイン駆動設計)では、集約ルートにはグローバル空間で一意なIDを付けるべし、という情報を得ました。
DDD本にも、「(集約)ルートエンティティはグローバルな同一性を持つ」という記述があります。
※ごめんなさい、電子書籍なのでページ番号分かりません。集約の不変条件についての記述です。
このことについて疑問がありますので教えて下さい。
例えば、プロジェクト管理アプリケーションを作っているとします。
ざっくりとした要件はこんな感じです。
- プロジェクトを複数管理できる
- ひとつのプロジェクトは複数のタスクから構成される
- 人員を複数管理できる
- 人員は、色々なプロジェクトのタスクに割り振られる
こうすると、集約としては「プロジェクト」と「人員」が出てくるかなと思います。
どちらも「プロジェクトID」と「人員ID」という、グローバル空間で一意なIDを付ければ良さそうです。
また、「タスク」は「プロジェクト」の集約に含まれそうなので、そういったIDは付けません。
ここからが本題なのですが、もしこのアプリケーションをクラウドサービス化したとしたらどうなるでしょうか。
「プロジェクト集約」とか「人員集約」とかは、サービスの契約者ごとに管理されなければなりません。
つまり、「サービス契約者ID」と「プロジェクトID」が揃わなければ、「プロジェクト」が特定できません。
これでは「プロジェクト集約」はグローバルなIDを持たないことになりますが、これは許されるのでしょうか?
あるいは、「プロジェクト集約ルート」は集約ルートからただのエンティティに降格するのでしょうか。
そもそも集約ルートがグローバルなIDで管理されなければならない、というのがいまいちピンときていないのですが・・・
上位の集約のID(上記例ではサービス契約者ID)にぶら下がるのでは、ダメなのでしょうか?
それとも、DDD本にある「グローバルな同一性」とは、単一のIDを要求するものではなく、「サービス契約者ID+プロジェクトID」という複合的なIDであっても、OKということでしょうか?