《大話設計模式》中第15章中《就不能不換db嗎?》引出了我今天要談論的主題:抽象工廠+反射+配置檔案 實現資料訪問程式。
當時也不甚理解啊。到了機房收費的親身實踐中,最終體會到了這對組合的奧秘。
抽象工廠模式(abstract factory)
提供乙個建立一系列相關或相互依賴物件的介面,而無需制定它們詳細的類。知道它是用來建立工廠的就ok了。
反射
提供了封裝程式集、模組和型別的物件。
這裡只用到反射的一部分功能。且記住它的格式:
assembly.load(「程式集名稱」.createinstance(「命名空間.類名稱」)
配置檔案
依照大鳥的思路,這樣的組合寫法就行方便的更改db,在程式須要更改資料庫時不須要又一次返工。僅僅須要從配置檔案裡,把資料庫的名字更改一下就ok了。我把大鳥的思路寫一下。(《大話》中的**是用c#語言寫的。而我是在vb.net 版的機房收費系統中理順思路的,所以下面**均為vb.net **。大同小異)
factory 中 dataaccess類
imports system.configuration '加入對配置檔案的引用,配置檔案命名空間
imports system.reflection '加入對反射的引用
public class dataaccess
'通過配置檔案獲取d層程式集的名稱和命名空間的名稱(普通情況下同樣):dal
'資料庫型別為:sqlserver
'建立d層類sqluserinfodal的例項
public function createuserinfo() as idal.iuserinfo
dim daluserinfoname as string = assemblyname & "." & db & "userinfodal" '宣告要例項化的d層類的名稱
return ctype(assembly.load(assemblyname).createinstance(daluserinfoname), iuserinfo)
end function
end class
配置檔案裡加入
假設須要更改資料庫比方說要把sqlserver 更改為access就可以 (這就要求我們在d層建類時,嚴格命名,把sql裡的類名前面應該是sqlserver開頭,access資料庫時類名應該用access開頭。)例如以下圖:
可是我在敲這一部分時,是這樣寫的(最初的最初,我沒有想著要給系統更換資料庫,所以某些變數和方法命名時沒有考慮把資料庫的選擇表達出來)
factory 中 dataaccess類
imports system.reflection '加入對反射的引用
imports system.configuration '加入對配置檔案的引用
public class dataaccess
' 建立乙個使用者user介面。並把相應的類名稱關聯上
public function createiuser() as idal.iuser
'通過配置檔案和反射。例項化介面並可以通過更改配置檔案的內容更改 例項化d層的程式集和命名空間下的類
return ctype(assembly.load(strdalname).createinstance(strdalname + "." + "userdal"), idal.iuser)
end function
' 建立乙個學生資訊studentinfo介面,並把相應類名稱關聯上
function createistudent() as idal.istudentinfo
return ctype(assembly.load(strdalname).createinstance(strdalname + "." + "studentinfodal"), idal.istudentinfo)
end function
end class
配置檔案裡這樣寫的
xml version="1.0" encoding="utf-8" ?
>
大家僅僅要關注:這一行就能夠了。把配置檔案所有內容貼出來僅僅是讓大家了解配置檔案內容的全貌。
考慮到以後可能更換資料庫,比如,日後我須要把如今所用的sqlserver 資料庫更換為access,我們僅僅須要又一次加入乙個程式集就可以。比如把該程式集命名為accessdal,緊接著,配置檔案裡把
更改為
然後在裡面加入其它類。類名和裡面的方法還應用sqlserver 資料庫時的類名和方法就能夠了,而不須要更改程式的其它程式集(其它的層)。見下圖小結
無論黑貓白貓,逮住老鼠就是好貓。解決這個問題的方法往往不侷限於一種。我相信抽象工廠+反射+配置檔案 這個組合不只能更換乙個資料庫,還能解決其它的一些問題。這都須要我們對敲**有一種鑽研和痴迷的精神,就像小菜最後說的:無痴迷,不成功。相信大家經過不懈的努力。都會成為優秀的程式猿。
登陸 抽象工廠 反射配置檔案
還記得照葫蘆畫瓢嗎?在敲機房收費系統的時候的確是照著三層加上自己的理解來敲的,整個過程下來就是完全照葫蘆畫瓢的。但是第一次成型,出現問題的時候,請教了別人。他將我的錯誤指出來,以及我自創的三層架構。看了看別人的,我的簡直不堪入目。別人長得是葫蘆,我這本來是葫蘆根,長出來的確是絲瓜,四不像。之後忍受各...
objective c實現配置檔案 反射 工廠建立
1.先寫plist配置檔案 plist寫到resouce裡面去 通過nsbundle把資料取plist讀出來 2.通過 nsclassfromstring建立類 nsclassfromstring nsselectorfromstring 正常來說,id myobj nsclassfromstrin...
機房重構 抽象工廠 反射 配置檔案(上)
被抽象工廠在重構中的運用困擾好久了,現在終於理清了一些頭緒。下面我就分享一下這一階段我所遇到的一些問題以及解決方法。通俗的講,配置檔案就是程式執行時需要用到的一些設定以及引數,它和程式一起安裝到計算機上。通過配置檔案,開發人員可以按需要對其做修改,而不必改變程式 就可以達到某種目的。配置檔案是標準的...