Open gracekrcx opened 2 years ago
來點莎莉 物件導向系統程式中,五個基礎設計原則 『 S.O.L.I.D 』
Dependency Inversion Principle (DIP) 依賴反轉原則 是一種『特定的解耦』形式
目的 『 解除 高階模組 (Caller 呼叫者) 與 低階模組 (Callee 被呼叫者)的 耦合關係, 使高階模組不再直接依賴低階模組。 』
依賴 當自身需要呼叫其他類別的實例時,就稱這樣的關係為 — 依賴。
小結 我們真正所需要的、依賴的,其實不是實際的類別與物件,而是他所擁有的『功能』
範例: People 不再依賴 Hamburger ,而是兩者都依賴 Stuffer 介面 => 高階模組不應該依賴於低階模組,兩者都該依賴抽象(Stuffer) => 抽象不應該依賴於具體實作方式(Hamburger) => 具體實作方式(Hamburger)則應該依賴抽象
解釋的好生動 『食物』依賴『人』『填飽肚子』的這個需求,所以才會不斷有新的食物 (實作 Stuffer 介面) 出現, 食物依賴需求,『需求』是『人的』,食物間接的依賴了人。
什麼時候需要遵守? 假設低層模組式類別是穩定的,就可以直接依賴 但如果是不穩定的,需要利用抽象介面來隔離他們的不穩定
不遵守的話? 如果直接依賴,低層模組在修改或替換時,高層模組將要在每個使用的地方做修改,也就是緊耦合
結論 幾乎所有的設計原則或設計模式,都是在談『 改變 』, 讓程式擁有『擴充』及『維護的彈性』,是讓自己保命的方式。
封裝隔離 People 不應知道具體的實作類別是誰,具體的實作應是可『 替換 』的: -- 替換 由 runtime (運行時) 傳入,而非 compile (編譯時) 就決定, 所以又被稱為 —— Plugin (插件)。
SOLID 依賴反轉原則 Dependency Inversion Principle (DIP) 依賴反向原則 (Dependency-Inversion Principle, DIP) 直白理解什麼是 Dependency Inversion (依賴反轉)
使人瘋狂的 SOLID 原則:目錄
來點莎莉 物件導向系統程式中,五個基礎設計原則 『 S.O.L.I.D 』
目的 『 解除 高階模組 (Caller 呼叫者) 與 低階模組 (Callee 被呼叫者)的 耦合關係, 使高階模組不再直接依賴低階模組。 』
依賴 當自身需要呼叫其他類別的實例時,就稱這樣的關係為 — 依賴。
小結 我們真正所需要的、依賴的,其實不是實際的類別與物件,而是他所擁有的『功能』
範例: People 不再依賴 Hamburger ,而是兩者都依賴 Stuffer 介面 => 高階模組不應該依賴於低階模組,兩者都該依賴抽象(Stuffer) => 抽象不應該依賴於具體實作方式(Hamburger) => 具體實作方式(Hamburger)則應該依賴抽象
解釋的好生動 『食物』依賴『人』『填飽肚子』的這個需求,所以才會不斷有新的食物 (實作 Stuffer 介面) 出現, 食物依賴需求,『需求』是『人的』,食物間接的依賴了人。
什麼時候需要遵守? 假設低層模組式類別是穩定的,就可以直接依賴 但如果是不穩定的,需要利用抽象介面來隔離他們的不穩定
不遵守的話? 如果直接依賴,低層模組在修改或替換時,高層模組將要在每個使用的地方做修改,也就是緊耦合
結論 幾乎所有的設計原則或設計模式,都是在談『 改變 』, 讓程式擁有『擴充』及『維護的彈性』,是讓自己保命的方式。
封裝隔離 People 不應知道具體的實作類別是誰,具體的實作應是可『 替換 』的: -- 替換 由 runtime (運行時) 傳入,而非 compile (編譯時) 就決定, 所以又被稱為 —— Plugin (插件)。
參考
SOLID 依賴反轉原則 Dependency Inversion Principle (DIP) 依賴反向原則 (Dependency-Inversion Principle, DIP) 直白理解什麼是 Dependency Inversion (依賴反轉)