2016-08-18 8 views
0

私はかなり大きなシステムの一部を設計し始めましたが、リポジトリを使用する最良の方法は何か不思議でした。クラスへのリポジトリインスタンスの注入

良いだろう方法:

 static void Main(string[] args) 
     { 
      var dataRepository = new DataRepository(); 
      var classA = new ClassA(dataRepository); 
      classA.Save(); 
     } 

     public interface IDataRepository 
     { 
      void Save(ClassA myInstance); 
     } 

     public class DataRepository : IDataRepository 
     { 
      public void Save(ClassA myInstance) 
      { 
       //Do some stuff 
      } 
     } 

     public class ClassA 
     { 
      private IDataRepository _dataRepository; 
      public ClassA(IDataRepository dataRepository) 
      { 
       _dataRepository = dataRepository; 
      } 

      public void Save() 
      { 
       _dataRepository.Save(this); 
      } 
     } 

それとも私が行う必要があります。

static void Main(string[] args) 
{ 
    var dataRepository = new DataRepository(); 
    var classB = new ClassB(); 
    dataRepository.Save(classB); 
} 

public interface IDataRepository 
{ 
    void Save(ClassB myInstance); 
} 

public class DataRepository : IDataRepository 
{ 
    public void Save(ClassB myInstance) 
    { 
     //Do some stuff 
    } 
} 

public class ClassB 
{ 
    //some stuff  
} 

または私はこれをよりエレガントにできた他の方法はありますか?

+0

純粋さを望むなら、UOWクラスを作成し、その中にリポジトリを渡します。これをやり遂げるのはどういう意味ですか? –

+0

それはおそらくDapperになるだろう – Draco

+1

私が言うことは、本当に必要なときだけ紹介すること –

答えて

2

実際、あなたの選択肢はそれほど悪くも良いものでもありませんが、それらは異なっています。

、DDDは私の心を構成する私自身の方法で友好的であることから、私は#2で行きます。通常、このアプローチは、より良い関心事とより少ない結合性を好むため、より良い方法です(私の見解です)。アクティブレコードパターンはクラスを非常に限定的にする欠点を持っていますが、POCOクラスはリポジトリに依存しません。そのユースケース(彼らはあまり再利用できません)。

これはもっと上品にできますか?

これは非常に幅広い質問です。可能な限り正確な答えを得るために、本を書く必要があります。

ところで、私はあなたが技術に依存しないドメイン取引を実装することができますので、さらに多くのソリューションに力を与えるであろう、unit of work patternを見てみなければならないと考えています。

関連する問題