包图+设计模式?
??? 最近開工了機(jī)房收費(fèi)系統(tǒng)重構(gòu)版,確實(shí)是有點(diǎn)糾結(jié)。
????因?yàn)檫@一次是完全應(yīng)用面向?qū)ο蟮乃枷朐O(shè)計(jì)程序。雖然之前學(xué)習(xí)了很多次面向?qū)ο缶幊?#xff0c;但是到實(shí)際應(yīng)用的時(shí)候,還是會(huì)感到無(wú)從下手。糾結(jié)也沒(méi)用,因?yàn)樯钸€在繼續(xù)。。
??? 機(jī)房收費(fèi)系統(tǒng),先從UML建模開始說(shuō)起,剛剛畫完包圖和用例圖,現(xiàn)在在頭疼類圖,說(shuō)到類圖,那真是無(wú)所適從,怎么抽象出類?添加什么屬性?應(yīng)該有什么方法?類直接又改怎么聯(lián)系?等等肯定不能像第一次畫圖那樣胡扯…沒(méi)關(guān)系只要去做,所有的問(wèn)題都不是問(wèn)題!
?
??? 說(shuō)到包圖,雖說(shuō)包圖比較簡(jiǎn)單,心里也明白要按照剛學(xué)的三層思想來(lái)設(shè)計(jì)包圖,但是具體怎么做呢?還是不懂,通過(guò)查閱資料稍稍了解了一些:
????????????
??? 這就是機(jī)房收費(fèi)系統(tǒng)的三層包圖。多么簡(jiǎn)單挺清晰!
但就是如此就可以了嗎?
??? 答案是 No!
??? 我們都知道包圖,體現(xiàn)的是整個(gè)系統(tǒng)的架構(gòu),而系統(tǒng)的架構(gòu)應(yīng)該是相對(duì)穩(wěn)定的,或者說(shuō)能夠良好的適應(yīng)變化的.因?yàn)榧軜?gòu)一變,代碼必定傷筋動(dòng)骨!這樣就會(huì)導(dǎo)致成本上升、工期延長(zhǎng)。這種結(jié)果我們肯定不愿看見。那么怎么才能隔離或者掌控這種變化呢?
??? 上個(gè)月剛剛學(xué)習(xí)了《大話設(shè)計(jì)模式》,設(shè)計(jì)模式一共有23種;根據(jù)模式的應(yīng)用目的,又將它們分為3 類:創(chuàng)建型、結(jié)構(gòu)型和行為型。回顧一下。另外在課本的第14頁(yè),我發(fā)現(xiàn)了這么一句話“重要的不是你將來(lái)會(huì)不會(huì)用到這些模式,而是通過(guò)這些模式讓你找到“封裝變化”,“對(duì)象間松散耦合”,“針對(duì)接口編程”的感覺(jué),從而設(shè)計(jì)出以維護(hù),易擴(kuò)展,易復(fù)用,靈活性好的程序。”仔細(xì)想想“對(duì)象間松散耦合”,“針對(duì)接口編程”的目的也是為了封裝變化,所以設(shè)計(jì)模式的作用則可以概括為四個(gè)字:“封裝變化”
??? 這個(gè)作用正好和架構(gòu)設(shè)計(jì)的難題“隔離變化”有點(diǎn)一拍即合的感覺(jué)。當(dāng)然事實(shí)也正是如此,設(shè)計(jì)模式可以封裝變化,幫助架構(gòu)“未雨綢繆”。
??? 總的來(lái)說(shuō):要讓設(shè)計(jì)的架構(gòu)能適應(yīng)變化,就是要預(yù)見組件之間的交互接口和編碼實(shí)現(xiàn)將來(lái)可能發(fā)生什么變化,并對(duì)此做出正確的決策:采用正確的設(shè)計(jì)模式去封裝變化。
?
在機(jī)房收費(fèi)系統(tǒng)中的體現(xiàn):
??? 如圖是加入設(shè)計(jì)模式后的包圖,IFactory(抽象工廠)和IDAL(DAL的接口)是為了預(yù)防數(shù)據(jù)庫(kù)的變更。
Facade(外觀模式)是為了U層和B層松耦合。
??? 大家可能會(huì)有疑問(wèn):程序中用到的設(shè)計(jì)模式都要體現(xiàn)在包圖上嗎?
??? 答案是:No!
??? 實(shí)際上我在構(gòu)思重構(gòu)版的時(shí)候還考慮到了應(yīng)用策略模式和狀態(tài)模式。但是為什么沒(méi)有添加到上圖中呢?這還要考慮這些模式的實(shí)際應(yīng)用。策略模式的作用是封裝算法,讓算法的變化不影響使用它的客戶。而這些算法邏輯都放在BLL層(業(yè)務(wù)邏輯層)所以策略模式可以作為包BLL的一個(gè)子包而存放其中,不存在調(diào)用關(guān)系。
?
??? 說(shuō)到調(diào)用關(guān)系,這也是包圖的一個(gè)非常重要的地方。包之間是否存在調(diào)用關(guān)系,以及調(diào)用的方向都需要我們仔細(xì)的斟酌。
?
??? 包圖就先說(shuō)到這吧,第一次學(xué)習(xí)包圖的時(shí)候,怎么沒(méi)發(fā)現(xiàn)原來(lái)包圖也有這么大的學(xué)問(wèn)!循循漸進(jìn)沒(méi)發(fā)現(xiàn)的還有很多。。。
?
?
總結(jié)
- 上一篇: PHP APP端支付宝支付
- 下一篇: java生成XML格式文件,导入MS P