ページ一覧を開く

ドメインモデルとDBモデル

ドメインモデルとDBモデルとは

ドメインモデルは業務の概念・関係・ルール・振る舞いを表し、DBモデルは保存するテーブルやカラム、ORM上の制約を表します。目的が異なるため、同じ形になるとは限りません。

ドメインモデルとDBモデルは分ける?

推奨

ORM制約がドメイン設計を歪める場合は分ける。単純な領域では同じオブジェクトから始めてもよい。

なぜ

分離には変換コストがある一方、複雑なドメインモデルをテーブル構造や遅延読み込みから守れます。

判断基準

  • ORM注釈や継承制約がドメインモデルへ漏れている
  • 保存形式とドメインの形が大きく異なる
  • DBなしでドメインテストを行いたい

BAD

常に分離するという理由だけで、単純なCRUDにも大量の同形クラスと変換コードを作る。

GOOD

Repository内のMapperがOrderRecordとOrder Aggregateを相互変換する。

図:ドメインを技術詳細から守る境界

ドメインモデル

業務の言葉・ルール・ID・例外

↑ Repository interface / Port ↑

DBモデル

テーブル・ORM制約

Mapper

保存形式へ変換

外部サービス

API・メッセージング

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