2016-08-18 58 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,这将增强您的解决方案更是因为你能够实现高科技无关的域名交易