2009年5月15日 星期五

程序員修煉之道 (The Pragmatic Programmer From Journeyman to Master) 第五章讀書心得

續上一章 程序員修煉之道 (The Pragmatic Programmer From Journeyman to Master) 第四章讀書心得.

此為讀後重點筆記,好書值得大家購買閱讀.

本章強調彈性的好處,寫出鬆散低耦合的程式碼,在將來能用最少的修改以完成變動的需求(理想烏邦托是這樣).

解耦 就有點像 島耕作 在公司裡的作為 - 不結黨營私,越少的利害關係才能明哲保身. 其中的Demeter 法則,是在譔寫方法時很好用的一個開發心法.

Metaprogramming 又是更進一步將工作流程從程式碼中解耦出來,現在很多框架都也是用這種方式來做設定. 不過也代表除了程式碼之外,也得知道 要到哪? 做哪些設定? 設定的效果? ,以上是我在遇到設定時比較頭疼的問題(不過有好好看文件,這些應該都不是問題.).

時間耦合 是提醒在一開始就以將來會支援並行性的心態來撰寫程式,當加入行程的考量時,程式的設計不得不跳脫線性執行的思考,同時也比較模組化.

這不僅僅是 UI 主要是使用 訂閱/發佈 和 MVC 的概念,將 資料/商業邏輯 從 UI 中拔出來. 不過只有提到大觀念跟架構,實際寫法我建議還是要另外找書看,免得寫出一堆自稱是 MVC 的爛扣出來!

最後一章黑板,我只能說寫的很抽像,若是套用在開發流程上,我知道是要大家在同一個地方做溝通與設計的動作(ex: wiki),不過後面將黑板套用在程式設計時則完全是沒有提到如果實作,本人極度懷疑這段是請某個會劃大餅的 sales 寫的啊! XD

第五章 Bend, or Break

Decoupling and the Law of Demeter

  • 限制程式元件間的互動,其實是在保護所有的程式元件.
  • 減少藕合就像裝潢房子,你只會跟設計師溝通你的想法,而不是跑去跟木工/油漆工/水泥工說你想要怎麼做. 另外,如果你跟設計師說你這面牆想要塗成黑色,設計師不應該是把油漆工叫到你面前 –> designer.callPainter().drawColor(Color.BLACK) // 火車頭寫法 囧rz
  • 根據上面例子,如果客戶不想要跟其它人沾上關係的話,那你的設計師就要夠包山包海. 換句話說,設計師類別裡頭會有大量的包裝 (Wrap) 方法,將客戶的要求轉給 (Delegate) 師父去執行.

Metaprogramming

  • 讓程式碼抽像化(以高階的思考撰寫),將實作細節隔離出來(容易抽換,文中是期望用改寫 config 的方式,在執行期動態切換.).
  • 越容易變動的地方,越是要用更容易替換的作法來處理.
  • 用設定檔的方式控制常會變動的流程/實作方式(常使用第三方框架應該知道我在說啥),而不是直接進入程式碼層次去搬泥巴.
  • 重新啟動很快的小程式,可以採取一開始就載入配置檔(只會載入一次)的策略. 大型需要長期執行的程式,則採取每次執行時總是載入配置檔的策略.

Temporal Coupling

  • 時間耦合度在程式設計中,指的是 順序 以及 併行 這兩種情況.
  • 利用 UML 的活動圖分析客戶提供的工作流程(通常是線性順序),找出其實可以同時執行的行為,以排除時間耦合度(原本被順序相依性所耦合).
  • 開發時就以支援並行性的角度來設計架構.

It’s Just a View

  • 利用 發佈/訂閱 的型式 取代 集中發送訊息/SPAM … 等不良作法.
  • MVC <- 這東西一言難盡,有心人請找書看與實作. 很多人號稱會 MVC 寫出來還是只有 V ,我自己也不敢保證自己有正確實作出 MVC . XD

Blackboards

  • 用黑板來溝通,主要概念就是有一塊大家可以 共同編輯/觀看/歷史紀錄 的環境,一個集中式的腦力激盪的空間,而不是每個人都在自己的小房間內搞自己的想法.

0 則回應:

Related Posts Plugin for WordPress, Blogger...