ドメインモデルの保存
-
22-08-2019 - |
質問
最近(非常に楽しい、非常に有益)エリック・エヴァンスのドメイン駆動設計を読み終えしかし本を完成以来、最初の主要なプロジェクトに来て、保存ドメインモデルを処理するためにどのように問題を得たか。
私は、サービス/リポジトリの利用に感謝し、どのようにモデルを支援することができますが、それらがどのようにモデルが保存扱うのでしょうか?
私の以前のドメインモデルは、次のメソッド呼び出しの構造をたどる保存します。
ParentClass.Save {
ParentClassDB.Save
ChildObject1.Save
ChildObject1DB.Save
ChildObject2.Save
ChildObject2DB.Save
etc etc
}
の子オブジェクト上のルーチン保存appropiateを呼び出すのサービステイク制御していますか?
解決
DDDでは、ドメインエンティティは、その持続性の世話をしていません。あなたは理想的に、それにSave()
メソッドを持つべきではありません。
あなたのリポジトリには、パラメータにエンティティインスタンスを取るようにSave
方法を、持っています
public class PersonRepository
{
//...
public void Save(Person person)
{
this.dataContext.Save(person);
}
//...
}
あなたのスタックによっては、ORMは、オブジェクトの保存を処理するか、人を救うために、クエリを構築することで終了します、またはあなたのインスタンス値などからでストアドプロシージャのパラメータに移入されます。
私が正しくあなたが何をしたか理解している場合、は、それはおそらくリポジトリに、あなたが他の場所でドメインエンティティに入れ永続ロジックを移動したり、あなたのリポジトリで使用されるDALにする必要があります。
他のヒント
あなたは集計のルーツを使用していますか?彼らは彼らの実体を保存するためresponsilbeされます。
ドメインサービスでそのロジックをカプセル化し、サービスを持っているかもしれない一つの方法に行くの変更の多くがある場合は、集計根を通してセーブ扱います。