集約を分解して永続化するための設計
下記の質問に関連します。
特定のパッケージやjarに対してのみ公開する可視性設定は可能か?
DDDにおける集約は、その内部状態(集約に含まれるエンティティやEnum型フィールド等)は公開せず、ユースケース上必要となるメソッドのみを外部に公開します。
しかし、永続化層ではその内部状態を調べてデータベースのテーブルにマッピングしなければなりません。
永続化のために全ての内部状態をpublic
メソッドで公開するのは避けたいので、何らかの制約のもとで内部状態を取得する仕組みを求めています。
目標とする隠蔽のレベルですが、最低限、「うっかり呼んでしまった」を防げれば良いと考えています。
public
メソッドになっていると、その集約オブジェクトの設計(どのpublic
メソッドが“真の”public
なのか)に関する知識が無ければ、「うっかり」呼んでしまいますが、何か特別な手続きを踏む必要性を取り入れれば、「うっかり」は防げます。
この条件下では、どのようなクラス設計が良いでしょうか。
何か応用可能なデザインパターンなどありませんか?