基於工廠模式的三層架構

2021-06-16 09:28:53 字數 2717 閱讀 6915

在專案開發時,有時候可能會增加或修改新的資料庫,比如,剛開始我們專案用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...