close

20171125_115547.jpg

讀書心得 - PHP 設計模式學習手冊

書名:PHP 設計模式學習手冊

原文書名:Learning PHP Design Patterns

作者:William Sanders

譯者:賴屹民

ISBN:986-276-770-7

發行所:碁峰資訊股份有限公司

出版社:歐萊禮

出版日期:2013/07

雜談:

  今天書中的語言主角是我最熟悉的語言PHP,由於PHP的規範不高,寫法很多種,所以在這裡先講一下我的背景,從第一份工作開始使用PHP到現在差不多一年半了,我的PHP歷程相當線性,基本上每種寫法都經歷過:

  1. 單頁式像是script 一樣使用的.php檔。
  2. 稍微有用class包裝工具的開頭到處include的網站。
  3. 初學各種MVC的框架設計,把Controller或Model搞得很肥的時期。
  4. MVC框架外使用composer依賴框架以外的library。

  現在的我喜歡自己組合想要的套件,而不是選用單一的大型框架

  1. 學習設計模式將複雜的功能單獨拉出設計。
  2. MVC框架時保持Controller只作收發功能,配合的前端工程師擅長玩SPA的框架時就改用只有router的micro framework開api給對方。
  3. 使用Query Builder或Medoo等DB Class取代一堆Model。
  4. 使用array_map、array_filter或是直接上laravel的Collection Class取代foreach增加可讀性。

  我目前正在專注的side project就是將上面的四種設計習慣結合起來的一套組合式PHP框架,專門使用在小型的SPA架構或APP後端。半年一路寫過來踩過不少坑也學習到很多知識,可能找個機會專門發一篇講述我PHP後端之路的故事,指引想進入後端的朋友們一個方向。

 

心得:

  首先PHP的寫法算是本書唯一的缺點,我認為這本書適合有MVC框架或其他常見軟體架構經驗的PHP工程師閱讀,原因在於本書的案例都沒有採用架構,會直接echo出html字串或是include許多php檔,簡單來說就是停留在

  1. 單頁式像是script 一樣使用的.php檔。
  2. 稍微有用class包裝工具的開頭到處include的網站。

這個類型的PHP寫法,但是現在已經很少人會這樣子設計了,若是沒有自己習慣的架構會容易被他的設計方式牽著走,導致看不出怎麼將模式應用到自己的專案中,尤其是設計模式會讓Class數量增加,不使用composer的autoload跟PHP的namespace會很難管理,建議可以先看過同出版社的《現代PHP》會比較好。

  至於本書的優點我認為有兩個一來是除了必備的UML外,還會採用一些非官方的圖示來讓讀者更了解這些模式,比如說下面這張工廠模式的檔案圖就相當明確的描述運作方式。

20171125_171815.jpg

 

  二來是本書的案例複雜度都足以套用設計模式,如果從網路上搜尋設計模式常常會得到一些案例太過簡單的教學,導致初學者覺得多此一舉。最好的案例就是書中狀態模式的九宮格移動案例,此案例也是我現在要跟朋友們推廣設計模式時直接採用的,對於提出”我們真的需要這麼多Class嗎?”的設計者,請他用switch跟if來設計這個案例後,請對方再幫它加上斜線移動的功能,來表示利用Class分散職責的好處。

20171125_171856.jpg

 

 

總結:

  我選擇從自己最擅長的語言進入設計模式的領域,本書並沒有講出所有的設計模式,只是提出幾個在PHP開發上常會用到的模式,但是我覺得作為入門很夠用了。比較可惜的是沒有提到利用靜態工廠解決PHP無法constructor overloading的問題,還有我本身認為狀態模式不適合用在HTTP連線上等議題。不過設計這種東西很難有明確的對錯,不同背景下的工程師得出的論點也會不一樣。本次的讀書心得就到此為止,謝謝正在觀看的你。

arrow
arrow

    迷宮兔 發表在 痞客邦 留言(0) 人氣()