ページ一覧を開く

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・メッセージング

保存や通信の形をそのままドメインモデルへ持ち込みません。技術都合がドメインモデルを歪めるときは、境界で変換します。