抽象工廠模式 資料訪問程式必須要更換DB嗎

2021-10-25 16:20:42 字數 3045 閱讀 8122

抽象工廠模式的資料訪問程式

抽象工廠模式:

優點和缺點:

簡單工廠改進抽象工廠

反射+抽象工廠

反射+配置檔案

更換資料庫惹出來的麻煩。 sql server和access的命名空間、物件、方法、函式和字段有很多不一樣的地方,如果更換資料庫的話,就需要更改資料庫和程式**,這樣會無形中增加很多的工作量.

下面就資料訪問程式來做一下更改。

工廠方法模式是定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。

iuser介面,用來客戶端訪問,解除與具體資料庫訪問的耦合。

sql serveruser類,用來訪問sql server的user。

ifactory介面,定義乙個建立訪問user表物件的抽象的工廠介面。

sqlserve***ctory類,實現ifactory介面,例項化sqlserveruser。

idepartment介面,用於客戶端訪問,解除與具體資料庫訪問的耦合。

sqlserverdepartment類,用於訪問sqlserver的department

ifactory介面,定義乙個建立訪問department表物件的抽象的工廠介面。

sqlserve***ctory類,實現ifactory介面,例項化sqlserveruser和sqlserverdepartment

iuser介面,用於客戶端訪問,解除與具體資料庫訪問的耦合

sqlserveruser類,用於訪問sqlserver的user

抽象工廠模式:

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定他們具體的類。

abstractproducta和b是兩個抽象產品(他們可能有兩種不同的實現,所以叫抽象)。

producta1 a2和b1 b2是對兩個抽象產品的具體分類的實現。

ifactory是乙個抽象工廠的介面,他裡面應該包含所有的產品建立的抽象方法,concretefactory1和2就是具體的工廠。

通常在執行時刻再建立乙個concretefactory類的例項,這個具體的工廠再建立具有特定實現的產品物件,也就是說,為建立不同的產品物件,客戶端應該使用不同的具體工廠。

優點:易於交換產品系列,由於工廠類,在乙個應用中只需要在初始化的時候出現一次,這就使得改變乙個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產品配置。

它讓具體的建立實力過程與客戶端分離,客戶端是通過他們的抽象介面操縱例項,產品的具體類名也被具體弓藏的實現分離,不會出現在客戶**中。

缺點:增加功能的時候,改動的地方比較多。

去除ifactory、sqlserve***ctory、accessfactory三個工廠類,將上面的三個工廠類取代為dataaccess類,用乙個簡單工廠模式來實現。

程式頂端寫using system.reflection;來引用reflection

"抽象工廠模式"

;private

static

readonly

string db =

"sqlserver"

;//資料庫名稱,可以替換成access

///

/// 這裡是使用反射之後的樣子

///

///

/// 使用反射需要加入命名空間:using system.reflection;//引入反射

public

static

iuser

createuser()

public

static

idepartment

createdepartment()

使用反射+抽象工廠模式解決了資料庫訪問時的可維護、可擴充套件的問題。

所有在用簡單工廠的地方,可以考慮用反射技術來去除switch或者if,解除分支判斷帶來的耦合。

<

?xml version=

"1.0" encoding=

"utf-8"

?>

"v4.0" sku=

".netframework,version=v4.7.2"

/>

<

/startup>

<

!--在配置檔案中更改,可以換成其他的資料庫--

>

<

add key=

"db"

value

="sqlserver"

/>

<

<

/configuration>

還需要在程式的開頭新增引用

using system.reflection;

//引入反射

using system.configuration;

//引用配置檔案需要增加的地方

//使用配置檔案之後更改的樣子

//這裡表示讀取配置檔案

private

static

readonly

"db"

];

程式設計是一門技術,大批量的改動,是一件非常醜陋的做法。

反射 抽象工廠的資料訪問

如有一介面iuser,繼承該介面的兩個類分別為sqlserveruser和accessuser 它們之間的關係是抽象工廠模式 而到底引用哪個類是通過db變數來決定,if db sqlserver 則例項sqlserveruser反之易然 簡單模式 view code 1 class data 2 1...

使用反射 抽象工廠的資料訪問 4

public idbcommand createcommand public dbdataadapter createdataadapter public idbdataparameter createparameter public void deriveparameters idbcommand...

使用反射 抽象工廠的資料訪問 2

2 定義針對於不同資料庫的工廠類 定義針對於不同資料庫的工廠類,一種資料庫就需要建立乙個相應的類。最主要 就是建立不同資料庫需要使用的對應的 connection command 等等物件。這些 很相似,所以最常見的做法就是先定義乙個基類,並且在基類中使用分支語句。例如在基類中建立連線物件的 pub...