在.net中用資料工廠實現多資料庫的操作方案
自從工廠模式的設計理念出來以後,這一切實現就變得容易得多,如果大家對微軟的PETSHOP有研究的話,那就不會陌生了,從PETSHOP3.0 開始,微軟就開始採用了多資料庫作業系統的應用。資料工廠主要是通過把資料庫的連線做成一個抽象的工廠,如命名DALFactory,程式中所有的資料庫 連線都通過這個工廠類來產生,用來負責根據配置檔案動態建立系統所需的資料訪問邏輯物件。
我們就拿PETSHOP來舉例說明,PETSHOP在安裝的時候,會提示我們選擇什麼資料庫,如根據顯示的是SQL Server資料庫還是Oracle資料庫,可以得到Web.config的節點中的:
或者是
然後在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檔案就可,無論增加多少資料庫,都是一件很簡單的操作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-448590/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#實現工廠模式簡介--實現訪問不同的資料庫C#模式資料庫
- 在Eclipse中用Java和MySql資料庫實現登入功能EclipseJavaMySql資料庫
- Redis多機資料庫實現Redis資料庫
- PHP常用操作類實現——資料庫操作類PHP資料庫
- 在RAC中用NID修改資料庫名稱資料庫
- [資料庫] Navicat for MySQL事件Event實現資料每日定期操作資料庫MySql事件
- django使用多個資料庫實現Django資料庫
- 用Asp實現對ORACLE資料庫的操作Oracle資料庫
- 常見資料庫的分頁實現方案資料庫
- 請問有在Jive中用oracle作資料庫的嗎?Oracle資料庫
- mybatis怎麼實現insert into多個資料-oracle資料庫MyBatisOracle資料庫
- 在Oracle中實現資料庫的複製Oracle資料庫
- 物聯網資料採集閘道器在工廠數字化轉型中實現資料上雲
- 記錄:如何使用ASP.NET Core和EnityFramework Core實現 資料庫操作 和 資料庫實體 的專案分離ASP.NETFramework資料庫
- Laravel模型工廠填充資料Laravel模型
- DM資料庫操作實踐資料庫
- 在智慧工廠建設中,資料採集閘道器可以實現哪些功能?
- Redis 設計與實現 (五)--多機資料庫的實現Redis資料庫
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- 資料庫方式實現方案?有什麼缺陷?資料庫
- 資料管理:業務資料清洗,落地實現方案
- ASP.NET MongoDB資料庫操作類ASP.NETMongoDB資料庫
- 請教。在ejb中用DataSource連線資料庫,報錯!資料庫
- 智慧工廠:工業裝置聯網及資料採集解決方案
- .NET關於資料庫操作的類-囊括所有的操作資料庫
- tp5實現多資料庫查詢資料庫
- 資料庫操作資料庫
- .NET 百萬級 大資料插入、更新 ,支援多種資料庫大資料資料庫
- MSSQL資料庫映象在Oracle中的實現方法SQL資料庫Oracle
- 在Oracle中實現資料庫的複製(轉)Oracle資料庫
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- 策略模式實現支援多種類資料庫的DBHelp模式資料庫
- 直播app原始碼,資料庫多資料來源自動選擇實現APP原始碼資料庫
- 實現 .Net 7 下的資料庫定時檢查資料庫
- 常用操作 / 資料庫操作資料庫
- 在ASP.NET中,向資料庫批次插入資料 (轉)ASP.NET資料庫
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- 在ASP.NET Core中用HttpClient(一)——獲取資料和內容ASP.NETHTTPclient