ドメインモデルの完全な状態を保つ方法
Javaでドメイン駆動設計を実践しようとしています。
質問ですが、DBレコードからドメインモデルを完全に構築するのがコスト面で現実的でない場合、どのように実装すべきでしょうか?
例えば、Line
が多数のPoint
を持ち、かつ、Point
からLine
を参照可能なモデルがあるとき、指定するidのPoint
の完全な状態のドメインモデルを構築するには、Point
、Line
に加え、Line
に属する全てのPoint
のDBレコードを獲得しなくてはなりません。仮にLine.points
の数が非常に多い場合、完全な状態のドメインモデルを構築するコストが高くなります。
public class Line {
private Long id;
private List<Point> points;
}
public class Point {
private Long id;
private Line line;
}
// setter, getter は省略
この場合、Line.points
を遅延ロードするというのが一般的な解決策でしょうか?
遅延ロードは遅延ロードを行う操作が行われるまでDBセッションを閉じられないのが少し気にかかります。
別の策として、似て非なるLine
とPoint
クラスを用意することも考えましたが、Line
やPoint
クラスにフィールドやロジックが増えてくるとコードの重複が多くなってしまいそうです。
皆さんはこういったケースではどのように実装されていますか?