TL;DR
- テーブルはレコード型に直接マッピングできる。ただし、RDB にはプリミティブな値しか保存できず、選択型もそのままでは表せない。
- RDB とやり取りするときは、ドメインオブジェクトと DTO を相互に変換する。ORM は使わない。
内容
第12章 Persistence のうち、リレーショナルデータベース(RDB)を扱う部分の概要である。詳細は節ごとのページにまとめた。
テーブルとオブジェクトのマッピング
テーブルはレコード型に直接マッピングできる(テーブルはレコード型に直接マッピングする)。ただし、RDB にはプリミティブな値しか保存できないので、保存する前に変換が必要になる。また、選択型にはそのまま対応できない。
選択型は、次のどちらかの方法でマッピングする(選択型をテーブルにマッピングする手法)。基本は 1 つ目を使い、ケース間の共通点が少ないときだけ 2 つ目を選ぶ。
- すべてのケースを同じテーブルに格納する
- ケースごとに別のテーブルに格納する
ネストした型は、その型がエンティティなら別のテーブルに、値オブジェクトなら同じテーブルに保存する(ネストした型をテーブルにマッピングする手法)。
読み取りと書き込み
RDB とやり取りするときは、ドメインオブジェクトと DTO を相互に変換する。読み取りは RDB からの読み取り と RDB から選択型を読み取る、書き込みは RDB への書き込み にまとめた。
ORM ではドメインの整合性を保てないので、RDB の結果をドメインオブジェクトにマッピングするときは ORM を使わない。