質問

最近(非常に楽しい、非常に有益)エリック・エヴァンスのドメイン駆動設計を読み終えしかし本を完成以来、最初の主要なプロジェクトに来て、保存ドメインモデルを処理するためにどのように問題を得たか。

私は、サービス/リポジトリの利用に感謝し、どのようにモデルを支援することができますが、それらがどのようにモデルが保存扱うのでしょうか?

私の以前のドメインモデルは、次のメソッド呼び出しの構造をたどる保存します。

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されます。

ドメインサービスでそのロジックをカプセル化し、サービスを持っているかもしれない一つの方法に行くの変更の多くがある場合は、集計根を通してセーブ扱います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top