国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

在.net中如何利用數據工廠實現多數據庫的操作_.Net教程

2024-07-10 12:50:41
字體:
來源:轉載
供稿:網友

推薦:.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),

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁强县| 永吉县| 时尚| 治多县| 北流市| 长海县| 河源市| 岳普湖县| 南昌市| 菏泽市| 泾源县| 福海县| 若尔盖县| 桂林市| 五原县| 吴江市| 宁陕县| 孟州市| 长子县| 白沙| 永嘉县| 唐河县| 石渠县| 景谷| 湾仔区| 镇巴县| 澜沧| 久治县| 喀什市| 石渠县| 长丰县| 信阳市| 富川| 仪征市| 丰镇市| 东光县| 浦东新区| 资阳市| 隆化县| 正阳县| 东兴市|