2016-08-18 97 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,這將增強您的解決方案更是因爲你能夠實現高科技無關的域名交易