2009-03-25 11 views
4

最近、Eric Evansのドメインドリブンデザインを読み終えました(非常に参考になりました、非常に楽しい)が、この本を完成してから最初の主要なプロジェクトになり、ドメインモデルの保存

私はサービス/リポジトリの使用とそのモデルをどのように助けることができますが、モデルセーブをどのように処理するのでしょうか?

以前のドメインモデルの保存は、次のメソッド呼び出し構造に従います。

ParentClass.Save {

ParentClassDB.Save

ChildObject1.Save

 ChildObject1DB.Save 

ChildObject2.Save

 ChildObject2DB.Save 
    etc etc 

}

サービスは、子オブジェクトの適切な保存ルーチンの呼び出しを制御しますか?

答えて

6

DDDでは、ドメインエンティティは永続性を考慮しません。理想的にはSave()メソッドを使用するべきではありません。

パラメータでエンティティインスタンスをとり、そのようなSave方法を持っていますあなたのリポジトリ、:あなたのスタックに応じて、

public class PersonRepository 
{ 
    //... 

    public void Save(Person person) 
    { 
     this.dataContext.Save(person); 
    } 

    //... 
} 

は、ORMは、オブジェクトの保存を処理するか、にクエリを構築することで終了します人を保存するか、インスタンス値などからストアドプロシージャのパラメータを設定します。

私が行ったことを正しく理解していれば、ドメインエンティティに置く永続ロジックを別の場所に移動する必要がありますリポジトリ、またはリポジトリで使用されるDALに格納されます。

+0

合意されましたが、PersonRepository.Saveメソッドはどこから呼び出されますか?アプリケーションから直接?ドメインアセンブリの "サービス"クラスから、アプリケーションから呼び出されますか? –

1

集約ルートを使用していますか?彼らはエンティティを保存するための責任があります。

多くの修正がある場合、そのロジックをドメインサービスにカプセル化し、サービスが集約ルートを介してセーブを処理するようにすることができます。