熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.net中利用數據工廠實現多數據庫的操作

2022-06-13   來源: .NET編程 

  在項目的開發過程中在設計模式的概念還沒有出來時我們那時候在編寫程序時往往如果項目的數據庫是采用SQL Server然後用戶又想換其它數據庫如Oracle時我們就需要對其代碼進行重寫特別是在一些軟件的產品化道路中我們做出來的產品如果讓用戶可以有選擇的去選取各種數據庫那無疑對用戶提供了很大的方便

  自從工廠模式的設計理念出來以後這一切實現就變得容易得多如果大家對微軟的PETSHOP有研究的話那就不會陌生了從PETSHOP開始微軟就開始采用了多數據庫操作系統的應用數據工廠主要是通過把數據庫的連接做成一個抽象的工廠如命名DALFactory程序中所有的數據庫連接都通過這個工廠類來產生用來負責根據配置文件動態創建系統所需的數據訪問邏輯對象

  我們就拿PETSHOP來舉例說明PETSHOP在安裝的時候會提示我們選擇什麼數據庫如根據顯示的是SQL Server數據庫還是Oracle數據庫可以得到nfig的節點中的

  <add key= WebDAL value= PetShopSQLServerDAL />
<add key= OrdersDAL value= PetShopSQLServerDAL />

  或者是

  <add key= WebDAL value= PetShopOracleDAL />
<add key= OrdersDAL value= PetShop OracleDAL />

  然後在DALFactory項目的DataAccess類中調用數據庫的連接代碼如下

  private static readonly string path = ConfigurationManagerAppSettings[WebDAL];

  然後再看下面的代碼

  public static PetShopIDALICategory CreateCategory() {
string className = path + Category;
return (PetShopIDALICategory)AssemblyLoad(path)CreateInstance(className);
}

  如我們使用的是SQL Server那麼string className = path + Category返回的就是PetShopSQLServerDAL Category然後再用AssemblyLoad加載PetShopSQLServerDALDLL同時創建PetShopSQLServerDALCategory的實例並以接口(PetShopIDALICategory)類型返回這樣業務邏輯層BLL調用ICategory接口時就會用PetShopSQLServerDALCategory類的實現代碼

  這時候用戶就不需要知道後台使用的到底是哪一種數據庫它只要調用接口就行了在接口中定義了要使用的方法當調用接口時會根據具體的情況再去調用底層數據訪問操作而現在這個DALFactory就是關鍵當業務邏輯層要操作數據庫時DALFactory會根據具體情況再去使用生成的程序集SQLServerDAL或者OracleDAL中的一個這樣做的好處是對於業務邏輯層及WEB頁面層的程序不會因為底層數據訪問的程序變動而受到影響因為只需要在業務邏輯層中調用接口就行了

  有可能有人會提我同樣在工廠類裡面提供下面的方法去實現調用數據庫

  

  

  public static readonly DALFactory dalFa;
string webDal = ConfigurationManagerAppSettings[WebDAL];
switch (webDal)
{
case SQLServerDAL:
dalFa = new SqlServerDALFactory();
break;
case OracleDAL:
dalFa = new OracleDALFactory();
break;
default:
dalFa = new SqlServerDALFactory();
break;
}

  而這個時候如果我們增加了新的數據庫訪問方式就必須得修改此部分的程序

  然後再重新進行編譯部署而同樣利用反射的機制去實現的時候我們舉個例子如果系統中現在需要增加MySQL數據庫的時候我們來看看它的代碼的可擴展性我們可以比較PETSHOP中的SQLServerDAL下面的Categorycs文件和OracleDAL下面的Categorycs文件的代碼可知道因為它們都繼承了ICategory接口所以類實現的方法都相同這時候我們只需要增加一個MySqlDAL項目其下面的Categorycs文件也同樣遵循ICategory接口的方法這時候我們再去修改為

  這個時候都不需要重新對項目進行編譯只需要增加MySqlDALDLL文件就可無論增加多少數據庫都是一件很簡單的操作數據工廠操作多數據的優點就明顯可見


From:http://tw.wingwit.com/Article/program/net/201311/12606.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.