以上兩句話,是節錄書中的段落,我自己的方式是會記錄段落,然後紀錄當下,促使腦袋去思考,老實說我讀完之後,還不是太理解,不過有抓到幾個本章應該學習的部分
每一個抽象介面的改變都對應到具體實作的改變,相反的,具體實作的改變,很少機率改變到實作的介面
先定義一下穩定,穩定書中提到事具有不容易變更的特性,換句話說若要變更需要花費很大心力,以上抽象類別-付款類別做舉例,有個付款的抽象介面,其中有個付款的方法,以使用方法的角度來看,我們只要使用這個付款方法,但不需要知道究竟他是用現金或是信用卡,台新還是玉山
好的架構師,會努力減少介面的變動性,致力於找到增加實作但不用更改介面的方式
編碼實戰守則
不要參考易變的具體類別,而應該參考抽象介面,並強制使用抽象工廠模式
同上舉例,你不該直接使用玉山金流的具體類別,而是該使用付款的抽象介面,使用付款的方法,這樣萬一玉山的付款參數有了變動,不只變更範圍可控,且影響較小
不要從易變的具體類別繼承,繼承是所有原始碼關係中最強大且嚴格的
同上舉例,具體類別本身特性,就是不穩定且容易變動的,如果繼承了具體類別,則若其中一方法變動了,將會造成繼承之的類別一起發生錯誤,此外在與朋友討論中,得出一個結論是繼承不該繼承子類不需要的洞悉(ISP),這是書中強大嚴格的意思
不要改寫具體函式
這邊我是想到OCP,對新的需求保持開放,對既有程式碼盡可能降低變更,假設玉山金流因故變動了付款參數,建議應該要再寫玉山付款2.0,而非改寫原有方法,因為可能發生未知錯誤
永遠不要提到任何具體和易變的名稱
再次強調不要依賴具體