Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(筆記)SOLID #130

Open
gracekrcx opened this issue Jul 5, 2022 · 1 comment
Open

(筆記)SOLID #130

gracekrcx opened this issue Jul 5, 2022 · 1 comment

Comments

@gracekrcx
Copy link
Owner

gracekrcx commented Jul 5, 2022

來點莎莉
物件導向系統程式中,五個基礎設計原則 『 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 (依賴反轉)

@gracekrcx
Copy link
Owner Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant