IDの生成場所
IDの生成場所とは
IDの生成場所とは、新しいEntityへ識別子を割り当てる責務とタイミングを、Domain側またはDB側のどちらに置くかという設計判断です。
IDはDomain側とDB側のどちらで生成する?
推奨
生成直後から識別が必要ならDomain側で生成する。DBの連番は永続化後までID不要な場合に限定する。
なぜ
保存前にIDがあれば、Domain Eventや他オブジェクトの参照をDBへの依存なしで組み立てられます。
判断基準
- 保存前にイベントへIDを含める
- 分散環境で衝突なく生成する
- ID形式自体に業務ルールがある
BAD
仮の0やnullをIDとして持たせ、保存後にドメインモデルを不完全な状態から修復する。
GOOD
FactoryがOrderIdを生成し、完全なOrderをRepositoryへ渡す。
図:ドメインを技術詳細から守る境界
ドメインモデル
業務の言葉・ルール・ID・例外
↑ Repository interface / Port ↑
DBモデル
テーブル・ORM制約
Mapper
保存形式へ変換
外部サービス
API・メッセージング