在.net中如何利用數據工廠實現多數據庫的操作_.Net教程
推薦:.NET初學者推薦課程 asp.net錯誤代碼大全錯誤 CS0001 編譯器內部錯誤 錯誤 CS0003 內存溢出 錯誤 CS0004 提升為錯誤的警告 錯誤 CS0005 編譯器選項后應跟正確的參數 錯誤 CS0006 找不到動態鏈接的元數據文件 錯誤 CS0007 .Net 環境初始
在項目的開發過程中,在設計模式的概念還沒有出來時,我們那時候在編寫程序時,往往如果項目的數據庫是采用SQL Server,然后用戶又想換其它數據庫如Oracle時,我們就需要對其代碼進行重寫,特別是在一些軟件的產品化道路中,我們做出來的產品如果讓用戶可以有選擇的去選取各種數據庫,那無疑對用戶提供了很大的方便。
自從工廠模式的設計理念出來以后,這一切實現就變得容易得多,如果大家對微軟的PETSHOP有研究的話,那就不會陌生了,從PETSHOP3.0開始,微軟就開始采用了多數據庫操作系統的應用。數據工廠主要是通過把數據庫的連接做成一個抽象的工廠,如命名DALFactory,程序中所有的數據庫連接都通過這個工廠類來產生,用來負責根據配置文件動態創建系統所需的數據訪問邏輯對象。
我們就拿PETSHOP來舉例說明,PETSHOP在安裝的時候,會提示我們選擇什么數據庫,如根據顯示的是SQL Server數據庫還是Oracle數據庫,可以得到Web.config的節點中的:
<add key=" WebDAL " value=" PetShop.SQLServerDAL "/> <add key=" OrdersDAL " value=" PetShop.SQLServerDAL "/> |
或者是
<add key=" WebDAL " value=" PetShop.OracleDAL "/> <add key=" OrdersDAL " value=" PetShop. OracleDAL "/> |
然后在DALFactory項目的DataAccess類中調用數據庫的連接,代碼如下:
private static readonly string path = ConfigurationManager.AppSettings["WebDAL"]; |
然后再看下面的代碼:
public static PetShop.IDAL.ICategory CreateCategory() { string className = path ".Category"; return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className); } |
如我們使用的是SQL Server,那么string className = path ".Category"返回的就是PetShop.SQLServerDAL. Category,然后再用Assembly.Load加載PetShop.SQLServerDAL.DLL,同時創建PetShop.SQLServerDAL.Category的實例,并以接口(PetShop.IDAL.ICategory)類型返回。這樣業務邏輯層BLL調用ICategory接口時就會用PetShop.SQLServerDAL.Category類的實現代碼。
這時候用戶就不需要知道后臺使用的到底是哪一種數據庫,它只要調用接口就行了,在接口中定義了要使用的方法,當調用接口時會根據具體的情況再去調用底層數據訪問操作。而現在這個DALFactory就是關鍵,當業務邏輯層要操作數據庫時,DALFactory會根據具體情況再去使用生成的程序集SQLServerDAL或者OracleDAL中的一個,這樣做的好處是對于業務邏輯層及WEB頁面層的程序不會因為底層數據訪問的程序變動而受到影響,因為只需要在業務邏輯層中調用接口就行了。
有可能有人會提,我同樣在工廠類里面提供下面的方法去實現調用數據庫:
public static readonly DALFactory dalFa;string webDal = ConfigurationManager.AppSettings["WebDAL"];switch (webDal){case "SQLServerDAL":dalFa = new SqlServerDALFactory();break;case "OracleDAL":dalFa = new OracleDALFactory();break;default:dalFa = new SqlServerDALFactory();break;} |
而這個時候如果我們增加了新的數據庫訪問方式,就必須得修改此部分的程序,然后再重新進行編譯部署,而同樣利用反射的機制去實現的時候,我們舉個例子如果系統中現在需要增加MySQL數據庫的時候,我們來看看它的代碼的可擴展性,我們可以比較PETSHOP中的SQLServerDAL下面的Category.cs文件和OracleDAL下面的Category.cs文件的代碼可知道,因為它們都繼承了ICategory接口,所以類實現的方法都相同,這時候我們只需要增加一個MySqlDAL項目,其下面的Category.cs文件也同樣遵循ICategory接口的方法,這時候我們再去修改為這個時候都不需要重新對項目進行編譯,只需要增加MySqlDAL.DLL文件就可,無論增加多少數據庫,都是一件很簡單的操作,數據工廠操作多數據的優點就明顯可見。
分享:對數據訪問層第一種實現(Acc SQL)的重構昨天的文章基于.NET平臺的分層架構實戰(七)——數據訪問層的第一種實現:Access SQL發布后,很多朋友對我的程序提出了意見和建議,在這里先謝謝你們!!!尤其是 金色海洋(jyk),
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面傳值測試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-在.net中如何利用數據工廠實現多數據庫的操作。