日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

在.net中如何利用數(shù)據(jù)工廠實(shí)現(xiàn)多數(shù)據(jù)庫(kù)的操作_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:.NET初學(xué)者推薦課程 asp.net錯(cuò)誤代碼大全
錯(cuò)誤 CS0001 編譯器內(nèi)部錯(cuò)誤 錯(cuò)誤 CS0003 內(nèi)存溢出 錯(cuò)誤 CS0004 提升為錯(cuò)誤的警告 錯(cuò)誤 CS0005 編譯器選項(xiàng)后應(yīng)跟正確的參數(shù) 錯(cuò)誤 CS0006 找不到動(dòng)態(tài)鏈接的元數(shù)據(jù)文件 錯(cuò)誤 CS0007 .Net 環(huán)境初始

在項(xiàng)目的開發(fā)過程中,在設(shè)計(jì)模式的概念還沒有出來(lái)時(shí),我們那時(shí)候在編寫程序時(shí),往往如果項(xiàng)目的數(shù)據(jù)庫(kù)是采用SQL Server,然后用戶又想換其它數(shù)據(jù)庫(kù)如Oracle時(shí),我們就需要對(duì)其代碼進(jìn)行重寫,特別是在一些軟件的產(chǎn)品化道路中,我們做出來(lái)的產(chǎn)品如果讓用戶可以有選擇的去選取各種數(shù)據(jù)庫(kù),那無(wú)疑對(duì)用戶提供了很大的方便。

自從工廠模式的設(shè)計(jì)理念出來(lái)以后,這一切實(shí)現(xiàn)就變得容易得多,如果大家對(duì)微軟的PETSHOP有研究的話,那就不會(huì)陌生了,從PETSHOP3.0開始,微軟就開始采用了多數(shù)據(jù)庫(kù)操作系統(tǒng)的應(yīng)用。數(shù)據(jù)工廠主要是通過把數(shù)據(jù)庫(kù)的連接做成一個(gè)抽象的工廠,如命名DALFactory,程序中所有的數(shù)據(jù)庫(kù)連接都通過這個(gè)工廠類來(lái)產(chǎn)生,用來(lái)負(fù)責(zé)根據(jù)配置文件動(dòng)態(tài)創(chuàng)建系統(tǒng)所需的數(shù)據(jù)訪問邏輯對(duì)象。

我們就拿PETSHOP來(lái)舉例說(shuō)明,PETSHOP在安裝的時(shí)候,會(huì)提示我們選擇什么數(shù)據(jù)庫(kù),如根據(jù)顯示的是SQL Server數(shù)據(jù)庫(kù)還是Oracle數(shù)據(jù)庫(kù),可以得到Web.config的節(jié)點(diǎn)中的:

<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項(xiàng)目的DataAccess類中調(diào)用數(shù)據(jù)庫(kù)的連接,代碼如下:

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,同時(shí)創(chuàng)建PetShop.SQLServerDAL.Category的實(shí)例,并以接口(PetShop.IDAL.ICategory)類型返回。這樣業(yè)務(wù)邏輯層BLL調(diào)用ICategory接口時(shí)就會(huì)用PetShop.SQLServerDAL.Category類的實(shí)現(xiàn)代碼。

這時(shí)候用戶就不需要知道后臺(tái)使用的到底是哪一種數(shù)據(jù)庫(kù),它只要調(diào)用接口就行了,在接口中定義了要使用的方法,當(dāng)調(diào)用接口時(shí)會(huì)根據(jù)具體的情況再去調(diào)用底層數(shù)據(jù)訪問操作。而現(xiàn)在這個(gè)DALFactory就是關(guān)鍵,當(dāng)業(yè)務(wù)邏輯層要操作數(shù)據(jù)庫(kù)時(shí),DALFactory會(huì)根據(jù)具體情況再去使用生成的程序集SQLServerDAL或者OracleDAL中的一個(gè),這樣做的好處是對(duì)于業(yè)務(wù)邏輯層及WEB頁(yè)面層的程序不會(huì)因?yàn)榈讓訑?shù)據(jù)訪問的程序變動(dòng)而受到影響,因?yàn)橹恍枰跇I(yè)務(wù)邏輯層中調(diào)用接口就行了。

有可能有人會(huì)提,我同樣在工廠類里面提供下面的方法去實(shí)現(xiàn)調(diào)用數(shù)據(jù)庫(kù):

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;}

而這個(gè)時(shí)候如果我們?cè)黾恿诵碌臄?shù)據(jù)庫(kù)訪問方式,就必須得修改此部分的程序,然后再重新進(jìn)行編譯部署,而同樣利用反射的機(jī)制去實(shí)現(xiàn)的時(shí)候,我們舉個(gè)例子如果系統(tǒng)中現(xiàn)在需要增加MySQL數(shù)據(jù)庫(kù)的時(shí)候,我們來(lái)看看它的代碼的可擴(kuò)展性,我們可以比較PETSHOP中的SQLServerDAL下面的Category.cs文件和OracleDAL下面的Category.cs文件的代碼可知道,因?yàn)樗鼈兌祭^承了ICategory接口,所以類實(shí)現(xiàn)的方法都相同,這時(shí)候我們只需要增加一個(gè)MySqlDAL項(xiàng)目,其下面的Category.cs文件也同樣遵循ICategory接口的方法,這時(shí)候我們?cè)偃バ薷臑檫@個(gè)時(shí)候都不需要重新對(duì)項(xiàng)目進(jìn)行編譯,只需要增加MySqlDAL.DLL文件就可,無(wú)論增加多少數(shù)據(jù)庫(kù),都是一件很簡(jiǎn)單的操作,數(shù)據(jù)工廠操作多數(shù)據(jù)的優(yōu)點(diǎn)就明顯可見。

分享:對(duì)數(shù)據(jù)訪問層第一種實(shí)現(xiàn)(Acc SQL)的重構(gòu)
昨天的文章基于.NET平臺(tái)的分層架構(gòu)實(shí)戰(zhàn)(七)——數(shù)據(jù)訪問層的第一種實(shí)現(xiàn):Access SQL發(fā)布后,很多朋友對(duì)我的程序提出了意見和建議,在這里先謝謝你們�。�!尤其是 金色海洋(jyk),

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2008-08-22
相關(guān).Net教程