设计模式&重整技术运用实例

设计模式&重整技术运用实例

ID:5921639

大小:49.00 KB

页数:10页

时间:2017-12-28

设计模式&重整技术运用实例_第1页
设计模式&重整技术运用实例_第2页
设计模式&重整技术运用实例_第3页
设计模式&重整技术运用实例_第4页
设计模式&重整技术运用实例_第5页
资源描述:

《设计模式&重整技术运用实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、設計模式&重整技術運用實例作者:點空間 陳國生 Email:bruce123@edirect168.com日期:2003/09/06設計電腦系統,最困難的部分是什麼?也許你可以找出一大堆的答案,但真正最困難的部分是面對系統功能的改變,這是因為我們無法去預知這些改變。但或許你會說,那就盡量保持彈性,話雖如此,但我們如何知道要在什麼地方保持彈性?但如果你的系統無法去應付這些改變,那麼就只有走向重寫一途,這無疑是一件讓人沮喪的事。在面對這個問題,我們`必須學會用設計模式去思考,如果系統的設計已經僵化了,我們就讓它柔軟下來

2、,如果柔軟不下來,就把它凍結起來,如果原來設計彈性就很好,我們就繼續擴充功能,沒有解決不了的事,以下我們舉個例子來說明這個想法。首先,我們從一個設計模式說起:Facade外觀模式。我們來談談這個模式,這個模式的用途是將一個子系統內部的眾多物件統一起來,產生新的介面出來。這讓我想到我們中國有句成語叫:老幹新枝。這個意義是,老幹已經失去了活力,但為了生存下去,必須產生新的枝芽,问问這跟一個已經僵化的系統一樣,我們無法期望從原來的枝長出葉子,所以只好另長新芽。如果一個系統已經糾成一團,如左圖般的狀態,再繼續擴充功能,或更

3、動系統功能,那無疑的是雪上加霜,加速系統的走向死亡之路。由於系統內部的物件交互影響,只要移動部分的功能,Client端的使用介面勢必要跟著改變,繼續使用這樣的系統結構,終究有一天會土崩瓦解。重新去調整這個致命的缺點,又跟重新改寫沒有兩樣,常常這樣讓人陷入進退兩難的窘境。如果我們可以用設計模式去思考解決問題,如右圖將原系統視為一個子系統,使用Facade這個樣式,重新產生使用介面,將這混亂的局面控制,不再像癌症一樣繼續擴散開來,內部的調整不再影響Client的使用介面,那麼就可以讓系統取得一個擴充功能的契機。系統控充

4、功能與內部結構的改善,這是兩個不同的方向,千萬不要攪在一起,也不要同時去改變,這樣會使問題更加的複雜,接下來,我們來探討一下什麼叫重整?MartinFowler於書中定義它是一種「在不改變代碼外在行為的前提下對代碼做出修改,以改進代碼的內部結構」的過程。如果說重整的目的不在於對既有的代碼增加新功能,而只是不影響程式既有功能及正確的執行下,改善程式代碼。那麼對許多人而言,讓他們感到相當疑惑的是,這種行為是否能帶來任何的益處?重整如果只是改善內部結構,那顯然是無助於增加效益,所以重整的目的勢必與往後的系統擴充功能產生緊

5、密的關聯。俗語說:休息是為走更遠的路,所以沒有重整,也就沒有更遠的路。而本篇重點是在改善結構跟擴充功能這兩個想法緊密的結合在一起。也就是說在改變現有結構之後,進行系統功能擴充,根據現有的結構加以改善,以符合擴充的需要。試想,如果沒有新的需求產生,需要擴充功能,又何必大費周章的去進行重整呢?但是從本篇的範例中,有些範例雖然未擴展功能,但經過使用樣式設計進行重整結構的改善,幾乎已經可以看見擴展新的功能的曙光,這是重整帶來最大的好處。俗語說:做衣容易,改衣難。這說明一件事,雖然做衣服跟改衣服,用的是同樣的技術,但卻是不同

6、的思維,所以變成了會做衣服卻不一定會改衣服。對設計系統而言,系統中任何一個變動,就像改衣服一樣,學習克服這些變動,才能快速的反應變動。近年來軟體工程的思維傾向貼近客戶需求,擁抱改變,但這不光是口號而已,在這個思潮下,背後必須有強而有力的設計技術及思考模式所支撐,因此學習這些基本技術及不斷的磨練你的思考模式,才能去符合這樣的要求。本篇就是基於這樣的想法,將設計模式與重整兩個重要的基本技術加以結合運用,實現系統面對改變時,如何去反應變動,及如何讓系統保持適當的彈性。底下,對本篇所提供的實作範例,作簡單扼要的說明:範例一

7、:運用Observer觀察者模式解開單元之間的耦合,是重整的典型範例,本範例著眼於系統結構改善,並未擴充新功能。範例二:運用TemplateMethod樣式設計資料庫的異動交易控制,這個範例架構在原系統上面,將原來程式碼加以凍結,並擴展新功能。範例三:運用Factory工廠模式設計多人使用的權限控制,這個範例使用替代的方式,在不改變原有功能的前提增加了系統的彈性。範例一 運用Observer觀察者模式解開單元之間的耦合 作者:陳國生 Email:bruce123@edirect168.com【解決問題】在Delph

8、i的物件中,TForm是一個很搶眼的角色,因為在一個Form當中,我們可以輕易的結合許多不同的物件一起工作,幾乎是無所不能,但是在比較複雜的系統中,我們必須根據不同的功能,切割放在不同的Form上面,或者說是在不同單元當中。當一個系統存在許多不同單元之後,我們要如何去讓這些單元可以相互合作?使用USES可以將兩個不同單元視為一個單元來使用,但遺憾的是,這種設

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。