在專案開發時,有時候可能會增加或修改新的資料庫,比如,剛開始我們專案用sql server 資料庫,但後來需要用oracle 資料庫,或者說在某些情況下需要用oracle 來代替sql server 資料庫,甚至兩種情況會同時存在,但資料庫訪問方面 oracle 和sql server 是不同的,它們的語句寫法不同,甚至所示喲哦那個的.net framework 資料提供程式也是不同的,那應該怎麼辦呢?
1. 新增資料訪問層
我們不修改原來的dal的**,可以將原來的專案命名為sqlserverdal,我們可以增加乙個針對oracle的dal專案來單獨實現對oracle的訪問。這樣就會有兩個dal,乙個用於訪問sqlserver,乙個用於訪問oracle。
2. 實現idal抽象介面
由於sql server 和 oracle 對資料庫的基本操作是一樣的,都是增、刪、改、查。所以,可以將相同的功能的操作的一系列物件抽象出來實現同乙個介面:idal。讓sqlserverdal 的類 和oracledal 的類都繼承這個介面。具體方法如下:
(1)新增idal類庫專案和介面檔案imanager.cs,具體**如下(由於介面中呼叫model, 所以需要新增對model專案的引用)
namespace idal
(2)在sqlserverdal 和 oracledal 專案中新增對idal專案的引用,然後,sqlserverdal 和 oracledal 專案中分別建立乙個資料訪問類:manager,並繼承自imanager的介面。
using system.data;
using system.data.sqlclient;
using dbutility;
using idal;
namespace sqlserverdal
////增加一條記錄
//public int add(model.manager manager)
////更新一條記錄
//public void update(model.manager manager)
////刪除一條記錄
//public void delete(string managerid)
////獲得列表
//public dataset getlist(string manageid)
//////得到乙個物件實體
///using system.data;
using system.data.oracleclient;
using idal;
using dbutility;
namespace oracledal
////新增一條記錄
//public int add(model.manager model)
////更新一條記錄
//public void update(model.manager model)
////獲得乙個實體
//public model.manager getmodel(string managerid)
////刪除一條記錄
//public void delete(string managerid)
////獲得列表
//public dataset getlist(string manageid)}}
注:在介面裡定義的所有介面方法,在派生類裡必須全部實現。
3. 實現抽象工廠模式
我們需要對**進行進一步的重構和抽象,我們可以考慮用設計模式、條件外接以及反射來實現,具體方法如下:
(1)新建dalfactory類庫專案,作為建立dal物件的工廠,並新建dataaccess類放到這個抽象工廠裡面去。並新增對idal專案的引用。
在dataaccess類中,我們建立物件通過配置檔案和反射技術實現。通過配置檔案的程式集名,決定載入具體的哪個dal的程式集,動態組合類名來動態建立dal物件,並返回idal介面物件,為了效能和使用方便,dataaccess類全部採用靜態方法實現。
using idal;
using system.reflection;
using system.configuration;
namespace dalfactory
} (2)實現條件外接,即通過配置檔案來實現對資料訪問層的判斷。我們可以把需要使用的dal型別資訊放在配置檔案中,然後根據配置檔案來選擇建立具體的物件(dal)。
在web.config配置檔案中增加當前資料訪問層的資訊:
此外,由於反射是一種非常耗費效能的操作。所以,我們可以通過快取的方式來進行處理。dataaccess**改為如下:
//使用快取
private static object createobject(string assemblypath, string classnamespace)
catch
} return objtype; }
////建立資料訪問層 //
public static idal.imanager createmanager()
(3)為bll專案新增對idal 和 dalfactory專案的引用。在bll層中通過dalfactory 來建立dal物件的介面呼叫,而不用關心具體該呼叫哪個dal物件。bll**如下:
namespace bll
//////查詢一條資料
///public model.manager getmodel(string managerid)
//其他**省略。。。。。。。。。。 }
}
三層架構之工廠模式(基於泛型)
1 目錄 2 model層 2.1 basemodel namespace study.model 2.2 user namespace study.model set public int age set 3 idal層 3.1 ibasedal namespace study.idal 3.2 ...
三層架構與簡單工廠模式
3層即所謂 模式 檢視 控制器 檢視 view 代表使用者互動介面 模型 model 就是業務流程 狀態的處理以及業務規則的制定 控制 controller 可以理解為從使用者接收請求,將模型與檢視匹配在一起,共同完成使用者的請求 典型案例 基於反射工廠的三層架構 設計時一般所分模組 dal 資料庫...
基於介面 工廠模式 三層架構的引用和訪問流程
一 專案名稱及描述 實現步驟為 4 3 6 5 2 1 1 web 表示層 2 bll 業務邏輯層 3 idal 資料訪問層介面定義 4 model 業務實體 5 dalfactory 資料層的抽象工廠 建立反射 6 sqlserverdal sqlserver資料訪問層 oracledal ora...