第一遍學習設計模式時,總有飄飄然的感覺.《大話設計模式》這本書雖然讀起來挺有趣味,也感覺比其他講設計模式的書好理解一些。但是真要用在機房收費系統時還是費勁的。公尺老師講過:思想要上移,行動要下移。這兩點要緊密結合,缺一不可。總在思想層面上繞,比如設計模式中所舉的生活中的例子,用在**中卻不是那麼容易,所以必須要行動下移,認真實踐。而總在**中繞,不進行總結提煉概括,學習就很侷限,所以我們也要不斷總結,思想上移。第二遍學習抽象工廠是在機房收費系統中,我想講講使用它的過程。
一.為什麼要用抽象工廠
以備我們的軟體要在不同資料庫上執行。現在我們使用的是sql sever,而要使用access或者oracle等時就需要考慮了。抽象工廠可以使我們靈活地更換到其他資料庫上。如何能夠靈活結合uml圖進行理解。
圖中的紅色框是idal(介面)。我舉個生活中的例子接電的插口來理解。同乙個插口我們可以插電腦,電視,電冰箱等等。只要插頭與插口的規格一致就可以。對於這張包中可以看到整個邏輯從ui到idal就結束了,後面的d層和helper要看具體情況,實現介面的可以使sqldal,也可以使accessdal。
二.反射和配置檔案是起什麼作用的。
《大話設計模式》中講過抽象工廠的優點和缺點。缺點之一就是需求增加時,比如要增加一張表。就要至少更改三個類。ifactory,sqlfactory,accessfacotry...所以採用了簡單工廠來改進抽象工廠,而在簡單工廠中的例項化需要通過分支判斷語句來判斷。這裡就引入了反射,反射主要來解決分支判斷的問題,使得例項化更加地方便。具體如何靈活需要通過例項講解。
反射使用格式:assembly.load("程式集名稱").createinstance("命名空間.類名稱「)
剛開始感覺很暈,不明白程式集名稱應該是什麼?命名空間又是指得哪個?反射是用來解決分支判斷問題的,使得例項化更加方便。程式集一定是要具體例項化的地方。這裡就是指d層,預設情況,程式集名稱和命名空間是同樣的。這裡都是sqldal,當然如果是accessdal,程式集名稱就是指accessdal了。說它靈活是指可以使用配置檔案指定具體是sql還是access。而具體的類名稱就要看你實現的是什麼功能了。如果是登入,那麼就是userdal(類名稱)
三登入例項應用
我按一條線的順序給出**:
b層:[vb]view plain
copy
'''
''' 驗證使用者是否存在
'''
''' 使用者實體
''' datatable
'''
public
function
existuser(
byval
enuser
asentity.usersentity)
asdatatable
dimiu
asidal.iuser
dimdt
asnew
datatable
iu = factory.dataaccess.createuser() '由於是shared定義的函式,這裡直接呼叫,不用例項化。
dt = iu.selectuser(enuser)
return
dt
endfunction
工廠:[vb]view plain
copy
private
shared
readonly
db as
string
"db"
) private
shared
readonly
assemblyname = db +
"dal"
'''
''' 使用反射和配置檔案建立相應的介面
'''
''' iuser介面
'''
public
shared
function
createuser()
asidal.iuser
dimclassname
asstring
= assemblyname +
"."+ db +
"userdal"
return
ctype
(assembly
.load(assemblyname).createinstance(classname), idal.iuser)
'呼叫反射
endfunction
介面:[vb]view plain
copy
'''
''' 登入時查詢使用者是否存在.
'''
''' 引數為使用者實體
''' datatable ,將userpassword,level,作為表中的兩列返回
'''
function
selectuser(
byval
enuser
asentity.usersentity)
asdatatable
d層的命名空間是sqldal,類名稱為sqluserdal。
配置檔案:
[vb]view plain
copy
"db"
value=
"sql"
/>
四.總結:多實踐,多總結。
登陸 抽象工廠 反射配置檔案
還記得照葫蘆畫瓢嗎?在敲機房收費系統的時候的確是照著三層加上自己的理解來敲的,整個過程下來就是完全照葫蘆畫瓢的。但是第一次成型,出現問題的時候,請教了別人。他將我的錯誤指出來,以及我自創的三層架構。看了看別人的,我的簡直不堪入目。別人長得是葫蘆,我這本來是葫蘆根,長出來的確是絲瓜,四不像。之後忍受各...
機房重構 抽象工廠 反射 配置檔案(上)
被抽象工廠在重構中的運用困擾好久了,現在終於理清了一些頭緒。下面我就分享一下這一階段我所遇到的一些問題以及解決方法。通俗的講,配置檔案就是程式執行時需要用到的一些設定以及引數,它和程式一起安裝到計算機上。通過配置檔案,開發人員可以按需要對其做修改,而不必改變程式 就可以達到某種目的。配置檔案是標準的...
工廠模式(簡單,配置檔案,反射,工廠方法,抽象)
簡單工廠模式的缺點,把矛盾集中在簡單工廠類中,使工廠類高耦合,而且進行修改和新增的時候也會比較麻煩。簡單工廠模式的優點,結構更加清晰,使 容易維護和分工明確,如下 namespace designmode public enum traffictype 下面是簡單工廠的意識圖 工程模式加上配置檔案的...