ドメインモデルとDBモデル
ドメインモデルとDBモデルとは
ドメインモデルは業務の概念・関係・ルール・振る舞いを表し、DBモデルは保存するテーブルやカラム、ORM上の制約を表します。目的が異なるため、同じ形になるとは限りません。
ドメインモデルとDBモデルは分ける?
推奨
ORM制約がドメイン設計を歪める場合は分ける。単純な領域では同じオブジェクトから始めてもよい。
なぜ
分離には変換コストがある一方、複雑なドメインモデルをテーブル構造や遅延読み込みから守れます。
判断基準
- ORM注釈や継承制約がドメインモデルへ漏れている
- 保存形式とドメインの形が大きく異なる
- DBなしでドメインテストを行いたい
BAD
常に分離するという理由だけで、単純なCRUDにも大量の同形クラスと変換コードを作る。
GOOD
Repository内のMapperがOrderRecordとOrder Aggregateを相互変換する。
図:ドメインを技術詳細から守る境界
ドメインモデル
業務の言葉・ルール・ID・例外
↑ Repository interface / Port ↑
DBモデル
テーブル・ORM制約
Mapper
保存形式へ変換
外部サービス
API・メッセージング