依賴反轉原則 - Dependency Inversion Principle
設計軟體時,有個原則被稱為依賴反轉原則。
依賴反轉原則是透過抽象化一層介面,讓物件之間透過議定好的介面進行溝通,舉結帳這件事情為例,我們可以將各種不同的金流服務抽象化為一個統一的介面(Interface),裡面只有成立訂單、付款、退款等方法可以使用,所有的金流服務都必須遵守這個介面進行實作(implement),因此對結帳這件事情來說,它只需要呼叫該介面裡的方法完成流程即可,不必管是什麼金流服務。
相較於常見的結帳相依於金流服務結帳 -> 金流服務
的線性關係,這種設計原則中的金流服務相依關係被反轉為 結帳 -> 金流介面 <- 金流服務
。
這種原則的好處是可以有效率的進行分工/整合,因為介面都統一了,要做什麼以及怎麼做也不用特別討論,也不容易出現整合時,要再去改一次原有流程裡的程式碼的情況。
此外,運用此原則也讓程式碼更易於測試,以結帳流程為例,不用真的呼叫金流服務的相關 API, 也能用一個有實作該介面的假金流物件丟進去測試流程。
以下是一個解釋的很好的 YT 影片,有興趣的人可以花 13 分鐘認識依賴反轉原則:
https://www.youtube.com/watch?v=9oHY5TllWaU
實務上,整合不同的金流服務也真的頗適合使用這種原則進行設計。