iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
0

1. 什麼是DIP 依賴反轉原則?

  • 最靈活的系統,原始碼的依賴關係只涉及抽象,不涉及具體
  • 避免依賴系統中,容易變化的具體元素,因為其特性是持續發展且經常變動

以上兩句話,是節錄書中的段落,我自己的方式是會記錄段落,然後紀錄當下,促使腦袋去思考,老實說我讀完之後,還不是太理解,不過有抓到幾個本章應該學習的部分

  1. 區分抽象類別和具體類別(ex. 抽象類別-付款類別 | 具體類別-玉山金流)
  2. 認知具體類別的特性,是隨時都在改變的(ex. 具體類別-玉山金流 | 新增退款的串接)
  3. 認知抽象類別的特性,是不容易有變動的(ex. 抽象類別-付款類別|付款行為是必要且不常變動的)
  4. 使用介面,建構出架構邊界,就像防火牆,讓具體類別可以彈性變動,但盡量改變造成的影響,跟 ISP 有點像,不過我覺得ISP 強調介面,DIP 強調的是 依賴關係的方向

2. 什麼是 穩定的抽象?

  • 每一個抽象介面的改變都對應到具體實作的改變,相反的,具體實作的改變,很少機率改變到實作的介面

    先定義一下穩定,穩定書中提到事具有不容易變更的特性,換句話說若要變更需要花費很大心力,以上抽象類別-付款類別做舉例,有個付款的抽象介面,其中有個付款的方法,以使用方法的角度來看,我們只要使用這個付款方法,但不需要知道究竟他是用現金或是信用卡,台新還是玉山

  • 好的架構師,會努力減少介面的變動性,致力於找到增加實作但不用更改介面的方式

  • 編碼實戰守則

    1. 不要參考易變的具體類別,而應該參考抽象介面,並強制使用抽象工廠模式
      同上舉例,你不該直接使用玉山金流的具體類別,而是該使用付款的抽象介面,使用付款的方法,這樣萬一玉山的付款參數有了變動,不只變更範圍可控,且影響較小

    2. 不要從易變的具體類別繼承,繼承是所有原始碼關係中最強大且嚴格的
      同上舉例,具體類別本身特性,就是不穩定且容易變動的,如果繼承了具體類別,則若其中一方法變動了,將會造成繼承之的類別一起發生錯誤,此外在與朋友討論中,得出一個結論是繼承不該繼承子類不需要的洞悉(ISP),這是書中強大嚴格的意思

    3. 不要改寫具體函式
      這邊我是想到OCP,對新的需求保持開放,對既有程式碼盡可能降低變更,假設玉山金流因故變動了付款參數,建議應該要再寫玉山付款2.0,而非改寫原有方法,因為可能發生未知錯誤

    4. 永遠不要提到任何具體和易變的名稱

      再次強調不要依賴具體


上一篇
D08 CH10 | ISP 介面隔離原則
下一篇
D10 日常心情隨筆
系列文
30天|入門NestJs連載學習筆記26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言