抽象工廠模式的資料訪問程式
抽象工廠模式:
優點和缺點:
簡單工廠改進抽象工廠
反射+抽象工廠
反射+配置檔案
更換資料庫惹出來的麻煩。 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...