2013-01-22 22 views
0

我想用NHibernate(也可能是Fluent但我不知道它)編寫可重複使用的類/項目數據庫,因此我可以在任何解決方案中添加類/項目。用NHibernate編寫一個可重用的組件數據庫

我有這樣的代碼:

public class DataBase 
{ 
    private ISession _session; 
    private static DataBase _instance; 

    public static DataBase Instance 
    { 
     get 
     { 
      if (_instance == null) 
      { 
       _instance = new DataBase(); 
      } 
      return _instance; 
     } 

    } 

    private DataBase(Assembly assembly) 
    { 
     var cfg = new Configuration(); 
     cfg.Configure(); 
     cfg.AddAssembly(assembly); 
     this._session = cfg.BuildSessionFactory().OpenSession(); 
    } 

    public void SaveAll<T>(IEnumerable<T> objects) 
    { 
     foreach (object obj in objects) 
     { 
      T specificObject = (T)obj; 
      _session.Save(specificObject); 
     } 
     _session.Flush(); 
    } 
} 

但隨着參數的單身是不是一個好主意。創建此組件的最佳方法/模式是什麼?

+0

爲什麼數據庫需要成爲單身人士?只有一個?如果我有兩個呢? – nvoigt

回答

2

我預測你會繼續研究這個,直到隨着時間的推移,DataBase類幾乎公開了NHibernate.Cfg命名空間和ISession接口公開的任何東西。

根據我的經驗,自舉代碼通常是項目特定的,不能重複使用(很多)。

包裝ISession API和/或查詢方法通常不是一個好主意,因爲最終,當用於幾個項目和幾年時,您將不得不包裝所有東西。

總之,小心包裝。封裝和抽象雖然可能會有用,使您的代碼避免重複和更容易理解。它也可能導致NHibernate暴露於一小部分代碼。

+0

我不確定你想用「自動化配置」來完成什麼。如果你有一組非常相似的項目,那麼分享一些初始化代碼可能會有好處。我認爲重要的是不要嘗試包裝NHibernate,而是提供擴展點,讓不同的項目可以覆蓋(廣義上)以適應共享的引導代碼。 –

+0

好的,謝謝!我會將具體方法添加到特定項目的特定類別。但我也在尋找一種自動化配置和加載域類的方法,並且我會很高興。 –

+0

「自動化」我的意思是我不想爲每個項目配置文件重寫,並手動添加類組件,因爲只有從一個項目到另一個項目的更改是數據庫引擎和類,但設置的步驟始終是相同的。 –

相關問題