程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 在.net中利用數據工廠實現多數據庫的操作

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

編輯:關於.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文件就可,無論增加多少數據庫,都是一件很簡單的操作,數據工廠操作多數據的優點就明顯可見。

<add key=" WebDAL " value=" PetShop.SQLServerDAL "/>為<add key=" WebDAL " value=" PetShop.MySqlDAL "/>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved