頻繁搬家導致實體筆記遺失,轉而以博客記錄。發現技術書分兩類:
養成習慣:摘錄「金句良言」、未懂之處、關鍵洞見、精辟小例,隨成長標準動態調整。
「在不改變代碼外在行為的前提下,對代碼做出修改以改進程序的內部結構。本質上說:重構就是在代碼寫好之後改進它的設計。」
—— 出自《重構》Martin Fowler。強調行為保持與設計改進雙重目標,重構非重寫,而是微小步驟累積。
「任何一個傻瓜都能寫出計算機可以理解的代碼,唯有寫出人類容易理解的代碼,才是優秀的程序員。」
—— 出自《重構》/《代碼整潔之道》。代碼給人讀,順便給機器執行;命名、結構、註釋服務於認知負荷降低。
「面向對象設計最困難的部分是將系統分解成對象集合,因為要考慮許多因素:封裝、粒度、依賴關系、靈活性、性能、演化、復用。」
—— 出自《設計模式》GoF。無銀彈,唯有權衡;單一職責、開閉原則、依賴倒置是指導燈塔。
「抽象類主要目的是為它的子類定義公共接口,一個抽象類將它的部分或全部操作的實現延遲到子類中。」
介面隔離、模板方法模式的基石;介面與實現分離,支撐多態替換。
「類繼承是一個通過復用父類功能而擴展應用功能的基本機制。它允許根據舊對象快速定義新的對象。」
優點:快速復用;缺點:破壞封裝、強耦合、父類變更波及子類。優先考慮組合/委托。
「只有當委托使設計比較簡單而不是更加復雜時,它才是好的選擇。」
委托轉發調用,增加間接層;若導致「類爆炸」或調用鏈過長,反而損害可維護性。
「獲得最大限度復用的關鍵在於對新需求和已有需求發生變化時的預見性,要求你的系統設計要能夠相應的改進。」
設計模式本質是「變化點封裝」;識別「什麼會變」,封裝之。
「一個不考慮系統變化的設計在將來就要可能需要重新設計。」
軟體實體生命週期中唯一常數是變化;架構須預留擴展點。
「Strategy 模式應用的關鍵點在於為 Strategy 和它的環境設計足夠通用的接口。」
介面設計決定模式成敗;過窄無法擴展,過寬導致實現類膨脹。
下一期將分享《Effective C++》條款精讀筆記,敬請期待。