2009-08-20 10 views

答えて

1

(これはGUIDやデータベースで生成された何らかのプライマリキーが使用されていることを前提に書かれています) 接続管理などのボイラーコードの多くはリポジトリの基本クラスに移動する必要があります。注文が集約ルートがある場合は 、1多分アセンブリ、私はこれは本当に簡単なナイーブな実装であることを強調したいしかし、私は個人的にNHibernateはのようなORMのために利用したいという

public class OrderRepository : Repository 

{ 
    public void Save(Order order) 
    { 
     if(order.IsDirty) 
     { 
        //sets up connection if required, command and sql 
      ICommand command = BuildCommandForSave(order); 
      command.Execute(); 
      OrderLineRepository orderLineRepo = GetOrderLineRepo(); 
      foreach(OrderLine line in order.OrderLines) 
      { 
       orderLineRepo.Save(line); 
      } 
     } 
    } 
} 

にOrderLineRepoをプライベートにする必要がありますよくテストされた永続性レイヤの要件としてDDDを行う場合、私の永続性は重要ではありません

また、これはIsDirty関数が子プロセスを考慮していることを前提としています。 、汚れただけではない

+0

サイドポイントとして、デフォルトの保存されていないID値を使用することがよくあります - saveが呼び出されると、このID値を見て、オブジェクトが新規/更新されているかどうかを判断することができます。 – saret

+1

Re: "よくテストされた永続性レイヤの要件は重要ではありません"。場合によっては、ADO.net永続性レイヤーを開発することが理にかなっています。重要な報告が必要なプロジェクトでは、純粋なADO.Netまたはマイクロオームが、CQRSのクエリ側で使用される「シン・リード・モデル」の推奨アプローチです。したがって、ADO.NETを使用する必要がある場合は、ADO.netをコマンド・サイドに使用することはあまりありません。特に、モデルに簡単にマップできないレガシー・データベースが関与している場合はクラス。あなたの答えは、DDDとADO.Netのアプローチを組み合わせるのに役立ちました。 –

関連する問題