在我上一篇文章發表后,收到了很多博友的回復,其中有一位博友提了一個問題,TestBase 繼承了ITest是多余的,我認為,我有必要再寫一篇文章來說明一下,TestBase為什么要繼承ITest,當然各位也可以再次發表自己的看法。
1 /// <summary> 2 /// 數據統一接口規范 3 /// </summary> 4 interface ITest 5 { 6 /// <summary> 7 /// 插入方法 8 /// </summary> 9 void Insert(); 10 }
還是那個統一接口規范,這時,有個ADO.NET 的數據基類,它會去實現它,如下
1 /// <summary> 2 /// 統一實體基類 3 /// ADO.NET操作基類 4 /// </summary> 5 abstract class TestBase : ITest 6 { 7 8 #region ITest 成員 9 10 public virtual void Insert() 11 { 12 Console.WriteLine("使用ADO.NET操作方式去實現它"); 13 } 14 15 #endregion 16 }
而我們的系統中,還有一種數據源,它叫Linq To SQL,同時它又是一個很好的ORM工具,它幫助我們很好的把實體數據庫進行映射進來了。它作為由linq to sql產生的實體的基類,去實現統一接口,如下:
1 /// <summary> 2 /// 統一實體基類 3 /// Linq To SQL操作基類 4 /// </summary> 5 abstract class TestBase : ITest 6 { 7 8 #region ITest 成員 9 10 public virtual void Insert() 11 { 12 Console.WriteLine("使用Linq To SQL操作方式去實現它"); 13 } 14 15 #endregion 16 }
這時,我們有兩個數據基類去實現了這個統一操作接口,這時,如果有其它數據源,如為單元測試提供的內存流數據庫,也是去實現統一操作規范。事實上,在DATA層提供了多種實現統一操作接口的方式,而它們的實體子類需要去分別繼承各自的基類和自己的個性化接口接口,而最終使用哪種數據庫去實現,我們可以通過IOC進行動態設定它。這只是最底層的層次,事實上,在每個實體操作的接口與實現中,還存在着這種關系,而這種關系一定會被約束在配置文件中,你可以根據配置的方式,在程序運行時去動態創建你的實例,當然這同樣是IOC干的事。