主題|設計模式

20180313 design patterm big1

為什麼該學好設計模式

設計模式(Design Patterns)一直是門易學難精的學問,開發人員從初出茅廬拿規格寫程式、程式會動就好的 coder,到想讓自己精進到有設計概念的 programmer,能設計出具有擴充性的產品,在面對需求異動時,能不傷筋動骨、優雅地擴充現有產品功能,是往資深工程師、tech lead 必備能力。

 

學習注意事項

學習設計模式前,最好已經有過許多實務開發上的痛點、卡點,不順的地方,學起來才會有感,才會知道設計模式可以幫助你解決什麼問題。除了痛點以外,當然,學設計模式之前也有一些前置天賦技能要點。

 

設計模式學習地圖

91 建議的設計模式學習地圖,是這樣的順序:

  1. 物件導向三特性、兩個抽象
  2. UML類別圖、UML循序圖

  3. SOLID 原則

  4. 重構、簡單設計

  5. 設計模式

 

我個人的想法,所謂的模式是基於某個面向的問題,用好的重構與設計技巧,讓原本的設計能面對未來需求的變化。這樣的問題是不分語言的,而重構的設計方式也與語言關係不大,最後產出一個比較 common 的通用設計方式,這就是模式。因此,我強烈推薦從遺留代碼,因應某個擴充彈性的需求,進行重構,重構到夠簡單、乾淨、剛好的滿足這個擴充性的需求,這樣學習設計模式的切入點才會比較實際,不會被設計模式綁死,而是面對真實的需求優雅的解決問題。

 

透過書籍學習設計模式的方式

此外,透過閱讀來學習設計模式時,我個人的習慣是,多看幾本不一樣的設計模式書籍。因為設計模式所面臨的問題,有時讀者跟作者的 context 並不相同,作者解釋的角度可能跟讀者的狀況不一樣,導致讀者無法順利理解作者要闡述的內容。這時,手邊有多本設計模式的書,挺有用的。這一本看不懂,翻翻別本設計模式怎麼解釋這個 pattern,就像換個老師用不同的角度再跟你解釋 pattern 的來龍去脈,往往容易帶領讀者跨過那道門檻。

 

當自己抓到一點感覺之後,就可以用自己的話去跟公司或社群的夥伴解釋,如果你講錯了,他們會第一時間給你指導或糾正。如果你講不清楚,你會發現你對這個東西還不夠熟悉,只是表面。如果你講對了、講得很好,會累積你的影響力,提昇更多人的設計能力。

 

為了避免模式而模式

設計模式學習過程中,最常見的問題是拿了鎚子之後,看到的都是釘子,到處亂捶。不要為了設計模式而設計模式,實務上避免設計模式 over design 的狀況,有三個很有效果的方式來避免這個問題:

  1. Refactoring to Patterns
  2. 簡單設計(Kent Beck 或 Martin Fowler 的 Simple Design)
  3. 測試驅動開發(TDD)

 

上述就是我推薦的學習姿勢,有足夠的痛點、想改善設計、想知道怎麼解決或避免問題,按照學習地圖的順序打好基礎,役物不易於物,設計模式是果,重構跟良好的設計才是根本,透過這樣學習設計模式,才能避免 over design,才能以解決問題為目標,而不是以設計出符合某個 pattern 為目標。

 

額外推薦書籍

(目前設計模式主題之外的)

 

推薦課程

活動書籍