在.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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- django多資料庫操作Django資料庫
- 在RAC中用NID修改資料庫名稱資料庫
- Redis多機資料庫實現Redis資料庫
- django使用多個資料庫實現Django資料庫
- mybatis怎麼實現insert into多個資料-oracle資料庫MyBatisOracle資料庫
- 記錄:如何使用ASP.NET Core和EnityFramework Core實現 資料庫操作 和 資料庫實體 的專案分離ASP.NETFramework資料庫
- .NET關於資料庫操作的類-囊括所有的操作資料庫
- DM資料庫操作實踐資料庫
- .NET 百萬級 大資料插入、更新 ,支援多種資料庫大資料資料庫
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- 實現 .Net 7 下的資料庫定時檢查資料庫
- Redis 設計與實現 (五)--多機資料庫的實現Redis資料庫
- 資料庫操作資料庫
- 資料庫操作·資料庫
- 在ASP.NET Core中用HttpClient(一)——獲取資料和內容ASP.NETHTTPclient
- 資料庫方式實現方案?有什麼缺陷?資料庫
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- Asp.Net Core Identity 多資料庫支援ASP.NETIDE資料庫
- 資料庫的基本操作資料庫
- 物聯網資料採集閘道器在工廠數字化轉型中實現資料上雲
- 策略模式實現支援多種類資料庫的DBHelp模式資料庫
- hibernate及SpringBoot整合Jpa實現對資料庫操作Spring Boot資料庫
- 簡述在ADO中使用介面的抽象資料提供程式以及ADO.NET資料提供程式工廠模型抽象模型
- 直播app原始碼,資料庫多資料來源自動選擇實現APP原始碼資料庫
- JSP實現servlet對資料庫的增刪查改操作JSServlet資料庫
- 在智慧工廠建設中,資料採集閘道器可以實現哪些功能?
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- SpringBoot整合MyBatis-Plus實現多資料來源操作Spring BootMyBatis
- 資料管理:業務資料清洗,落地實現方案
- MySQL 資料庫操作MySql資料庫
- mongodb資料庫操作MongoDB資料庫
- 資料庫基本操作資料庫
- MongoDB 資料庫操作MongoDB資料庫
- laravel 資料庫操作Laravel資料庫
- Laravel模型工廠填充資料Laravel模型
- .NET 資料庫大資料 方案(插入、更新、刪除、查詢 、插入或更新)資料庫大資料
- ASP.NET Core使用EF Core操作MySql資料庫ASP.NETMySql資料庫
- .NET使用TDengine時序資料庫和SqlSugar操作TDengine資料庫SqlSugar
- 在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle資料庫NetCoreC#APPOracle資料庫