新聞中心
面向?qū)ο笤瓌t,設(shè)計模式,簡單設(shè)計,重構(gòu)到模式……看起來都是常規(guī)操作,但你有想過他們的關(guān)系么?

忍不住要山寨一段《寫了這么多年代碼,你真的了解SOLID嗎?》中的發(fā)言:
| 上面提到的每一項大家都耳熟能詳,但我發(fā)現(xiàn)大部分開發(fā)者并沒有真正理解。要獲得***收益,就必須理解它們之間的關(guān)系,并綜合應(yīng)用所有這些原則。只有把它們作為一個整體,才可能構(gòu)建出堅實(Solid)的軟件。遺憾的是,我們看到的書籍和文章都在羅列每個原則,沒有把它們作為一個整體來看,甚至提出這幾項的知名大叔們也沒能講透徹。因此我嘗試介紹一下我的理解。 |
面向?qū)ο笤瓌t(OO+SOLID )
偷懶一下,請大家移步,直接參考文章《寫了這么多年代碼,你真的了解SOLID嗎?》,記得回來呦~
簡單理解,面向?qū)ο笤瓌t給我們提供了一系列面向?qū)ο笊舷挛南碌?**實踐,指導(dǎo)原則和***目標,符合這些原則可以幫助我們***化OO的威力。
如果把面向?qū)ο箢惐瘸绍浖_發(fā)領(lǐng)域的一個武林門派,面向?qū)ο笤瓌t就是這個門派的***心法和目標,打個比方,有點像:心與意合,意與氣合,氣與力合,肩與胯合,肘與膝合,手與足合……這種。
心法這種東西就是神神秘秘的,真正看起來也簡單,字面上也不難理解,很容易用它來挑戰(zhàn)別人:“你看你看,你沒有做到手與足合!”
但是回到自己,要想做到就難了,知易行難!
歸其原因它雖然提供了目標和評價標準,使我們很容易拿他來評價別人,但并沒有告訴我們自己如何才能達到這樣的目標和標準。
設(shè)計模式(Design Pattern)
那設(shè)計模式是什么?
很多人,包括我在內(nèi),都曾迷陷于23種設(shè)計模式之中,初識設(shè)計模式,贊嘆于其精妙,就像個萌新的江湖小生,偶然間掉到個山洞,一下就集齊了威震江湖的“7種武器”。
然后……就開始了用長生劍切菜,用碧玉刀削瓜的“幸福生活”,不但把簡單的事情搞得巨復(fù)雜,最不能忍的是還暴殄天物!
回到設(shè)計模式,無非是在面向?qū)ο笤瓌t這些虛無縹緲的“心法”指導(dǎo)原則下,那些前輩大神們留下的“招式”或是“套路”而已。但招式和套路并不能致勝,它只是為我們這等小白提供了一個接近大神,理解心法的途徑而已,通過長年累月的模仿去反思去領(lǐng)悟去體會“心法”的本質(zhì)和精妙,此時腦中不禁浮現(xiàn)《少林寺》中李連杰夏練三九冬練三伏的畫面……
這就能解釋為什么使用同樣的招式,大神們總能一擊致命,而我們卻總是被按倒在地摩擦的原因了。
簡單設(shè)計(SimpleDesign)
設(shè)計模式是套路和招式,那簡單設(shè)計是什么?
首先要區(qū)分一下簡單設(shè)計和容易設(shè)計:
| 簡單的反義詞是復(fù)雜,容易的反義詞是困難。簡單不等于容易,追求簡單的過程往往很困難,如果只是追求容易的往往導(dǎo)致系統(tǒng)過于復(fù)雜。 |
這是好多年前一位同事提到過的一句話,很在點兒上,我們經(jīng)?;煜撕唵魏腿菀?,對于這點,另一位同事之前也寫過一篇文章來闡述做到“簡單”的“困難”。
| 做為結(jié)果的簡單設(shè)計是這么一種設(shè)計,它能被幾乎所有人理解, 但只有極少數(shù)人能做出. 或者反過來說也可以. 簡單設(shè)計是一種只有極少數(shù)人能做出的設(shè)計,但設(shè)計一旦做出后,能被所有人理解。 |
可見簡單設(shè)計是一種只有極少數(shù)人能做出的設(shè)計,那我們怎么才能成為那“極少數(shù)人“呢?
對此,Kent Beck給出了清晰的答案:
- 通過所有測試(Passes its tests)
- 盡可能消除重復(fù) (Minimizes duplication)
- 盡可能清晰表達 (Maximizes clarity)
- 更少代碼元素 (Has fewer elements)
- 以上四個原則的重要程度依次降低。
這組定義被稱做簡單設(shè)計原則。
我們不具體探討這幾個原則,回到最初的問題,如果說面向?qū)ο笤瓌t是”心法“是”目標“,設(shè)計模式是前輩們沉淀下來的”套路”和“招式“的話,那簡單設(shè)計是什么呢?
我覺得就是實戰(zhàn)指導(dǎo)原則,他可以讓我們不局限于哪些經(jīng)典的過往的招式,跳出套路,無招勝有招。
如果說設(shè)計模式是一種自上而下,通過不斷模仿前輩大神套路達到目標的一條道路的話(有招勝無招);那簡單設(shè)計原則則是另一條自下而上,忘掉招式和套路,遵循簡單的基本原則,隨機應(yīng)變,不斷演進,不斷浮現(xiàn),逐步逼近目標的另一條道路(無招勝有招)。
但,記住,殊途同歸。
好,這位客官問了,那兩條道路都可以幫我們掌握武功***的心法的目標,我走哪條呢?如果我已經(jīng)會了一條,還需要學(xué)習(xí)另一條路徑么?
重構(gòu)到模式(Refactor to DesignPattern)
說到這里,就不難理解“重構(gòu)到模式”到底在說什么了吧。
它無非是在解釋如何通過自下而上應(yīng)用簡單設(shè)計原則,運用重構(gòu)的技術(shù)和手法,浮現(xiàn)出設(shè)計模式。我管這個過程叫“重走長征路”,重新體驗一下那些大神前輩們創(chuàng)建發(fā)現(xiàn)設(shè)計模式的過程。
這個過程也再次證明了這兩條通往同一個目標的不同的道路也是可以相互轉(zhuǎn)換的,它們只不過是面向?qū)ο笤瓌t下的兩種不同形式的表現(xiàn)而已。
如果說“設(shè)計模式”是“有招勝無招”,“簡單設(shè)計”是“無招勝有招”的話,那“重構(gòu)到模式”就是“無招生有招”的過程。
總結(jié)
總的來說,我們可以把這幾個概念作為一個整體框架來思考。
“面向?qū)ο笤瓌t”是OO領(lǐng)域的***目標,是面向?qū)ο筮@門武功的心法,很容易用來評判別人,但是自己卻很難達到。
為了能達到心法的境界,之前的各任掌門大神們總結(jié)并留下了一些套路和招式,什么降龍十八掌之類的,讓我等晚輩可以通過日復(fù)一日的刻意練習(xí),去不斷參透心法的真諦,這些套路和招式就是“設(shè)計模式”。
但只有這十八招顯然是不夠的,于是我們又學(xué)到了一些實戰(zhàn)指導(dǎo)原則,讓我們以另一種方式,自下而上,跳出招式和套路的限制,甚至能不斷浮現(xiàn)出新的招式,且通向的是同一個目標,這些實戰(zhàn)指導(dǎo)原則就是“簡單設(shè)計原則”。
***,不斷操練“重構(gòu)到模式”,通過實際運用實戰(zhàn)指導(dǎo)原則和手法,推演招式和套路,幫助我們將這兩種方法融會貫通,相互結(jié)合,最終領(lǐng)悟那隱藏在一切表象背后的真理,達到無招勝有招,草木竹石皆可為劍,心隨意走,人隨心動的境界。
【本文是專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號:思特沃克,轉(zhuǎn)載請聯(lián)系原作者】
網(wǎng)頁題目:寫了這么多年代碼,你真的了解設(shè)計模式么?
分享URL:http://m.fisionsoft.com.cn/article/djggcpp.html


咨詢
建站咨詢
