經(jīng)驗交流:關(guān)于軟件設(shè)計的一點心得體會
http://dev. 2007年06月28日 論壇整理 博客園
-
曾經(jīng)看過一本書叫《道法自然》,內(nèi)容略記得一二,,但我最欣賞的是它的書名,。軟件設(shè)計沒什么太神秘有東西,只要用心體會,,其實一切都很自然,。軟件的設(shè)計之“道”,也不在于設(shè)計有多么的華麗,、精巧,,而在于其樸實、自然,,最終達(dá)到“以無招勝有招”,,進(jìn)入一個全新的境界。 一,、軟件設(shè)計理論的層次 以我的拙見,,軟件設(shè)計領(lǐng)域中的各種概念,可以分為以下幾個層次來進(jìn)行理解: 1,、軟件設(shè)計的目的:重用性,、擴(kuò)展性。 這是最高的層次,,是應(yīng)對軟件危機(jī)的需要,。 2、設(shè)計原則:低耦合,、高聚合,。 各種軟件設(shè)計的原則,如依賴倒置原則,、單一職則原則,、面向接口等,以及各種設(shè)計模式,,其根本的目的其實只是為了降低耦合這么簡單,。因為只有低耦合才能更好的適應(yīng)變化,更好的重用和擴(kuò)展,。 3,、實現(xiàn)方法:運用設(shè)計模式封裝變化、降低耦合,。 設(shè)計模式只是用來“封裝變化,、降低耦合”的工具而已。它是面向?qū)ο笤O(shè)計時代的產(chǎn)物,其本質(zhì)就是充分運用面向?qū)ο蟮娜齻€特性,,即:封裝,、繼承和多態(tài),進(jìn)行靈活的組合運用,。 二,、關(guān)于耦合 1、耦合的粒度 耦合無論如何也是不可避免的,。當(dāng)我們實現(xiàn)接口,、繼承父類的時候,就會不可避免的產(chǎn)生耦合,。耦合是有不同粒度的,,我們解耦到什么粒度為止,我認(rèn)為應(yīng)以模塊的重用粒度為準(zhǔn),。盡量解除重用模塊或?qū)ο笾g的耦合,。而重用模塊之內(nèi)的耦合,應(yīng)屬于聚合的范疇,,所以不要盲目的去解耦,,否則就陷入了誤區(qū)。 2,、解耦的原理 怎樣才能解耦呢,,或者說為什么各種設(shè)計模式能達(dá)到解耦的目的呢?我覺得有以下幾個思路: (1)將具體的東西抽象處理 (2)將分散的東西集中處理 而面向?qū)ο笾械慕涌凇⒗^承正為我們提供了這樣的一種機(jī)制,。通過訪問接口或基類或抽象類,,而不是具體的實現(xiàn)類,從而與具體的實現(xiàn)類達(dá)到了解耦的目的,。我們還可以設(shè)計一些控制類,,像潤滑劑一樣,協(xié)調(diào)各實現(xiàn)類之間的訪問,,也可以達(dá)到耦的目的,。 事實上,各種設(shè)計模式的基本思想也就是這樣,。創(chuàng)建型模式是為了解除創(chuàng)建對象時產(chǎn)生的耦合,,實際上是解除對類稱名的依賴,而結(jié)構(gòu)型和行為型是為了解除對象屬性或方法的直接調(diào)用,。不管什么設(shè)計模式,,都是將對具體實現(xiàn)類的訪問提升為對接口、基類或用于協(xié)調(diào)的控制類的訪問,。 三,、關(guān)于接口 這一節(jié)更具體,,談一談接口,因為使用接口是軟件設(shè)計的重要手段,,但已經(jīng)不屬于“道”了~ 1,、接口與繼承 2,、接口與純虛類 理論上接口可以由純虛基類實現(xiàn)類似的功能,那為什么還我們不去掉接口的概念,,而直接使用虛類呢? 接口存在的理由就是它更加靈活,,關(guān)系簡單,易于理解,。比如一個類可以實現(xiàn)十幾個甚至幾十個接口,,但一般開發(fā)工具只支持單繼承(由于多繼承太容易導(dǎo)致混亂和沖突),如果要繼承十幾層,,系統(tǒng)結(jié)構(gòu)想必會無法理解了,,我以為這是接口存在的最重要的原因。 如果接口和虛類繼承結(jié)合使用,,可以產(chǎn)生強(qiáng)大的威力,,這也是許多設(shè)計模式的“殺手锏”。 以上算是總結(jié)一下自己的心得,??隙ㄓ胁簧倨嬷帲埜魑恢附?。 |
|