英文是 Dependency Inversion Principle(DIP)
他所要描敘的東西跟介面隔離原則有點相似
不過介面隔離原則所強調的是不要強迫使用者去依賴它所不需要的模組
而依賴倒置原則想做的是解除高階模組和低階模組的依賴關係
簡單而言就是解耦
依賴倒置原則大概有三個重點:
所以在前面的物件導向介紹中
才會一直強調抽象的重要性
我們先來定義什麼是高階和低階模組
高階模組指的是呼叫者(Caller)
低階模組就是被呼叫者(Callee)
我們來看個例子
我今天開著瑪莎拉蒂
我使用了瑪莎拉蒂在路上跑的功能
因此我是高階模組
瑪莎拉蒂是低階模組
這邊很有趣的是
雖然看起來是我在操縱瑪莎拉蒂
但是實際上卻是我依賴瑪莎拉蒂
在UML圖內
模組A指向模組B
代表A使用B(或繼承實作介面抽象)
雖然看起來是A在用B
但是依賴關係卻是A依賴B
聽完還是有點迷糊嗎
我之前在看別人文章的時候
看見了一個很好的例子
分享給大家
今天有一名8+9在吸食毒品
8+9 以為自己吸食毒品只是滿足自己的快感
他還以為他自己的意志行為是被自己所掌控
錯!!!
其實8+9這時候所有的行為已經被毒品所控制
再也離不開毒品了
我們今天想要讓8+9改過向上
戒毒成為奮發向上的好青年
因為現在8+9直接依賴著毒品
我們讓8+9改成依賴藥品這個介面
現在我們成功讓8+9依賴藥品而不是毒品
然後再將做一個健康食品的類別實作藥品
然後偷偷把毒品換成健康食品
這樣子8+9以為自己吃的藥品是毒品
實際上卻是每天吃健康食品
於是8+9頭腦變好了 走路也不晃了 考試也考100分
成為國家的棟樑
其實這個例子就是昨天資料庫版的翻版
我覺得這個部落格中的文章都寫得淺顯易懂
而且例子都很有趣
(可是好久沒有新文章了TAT)
SOLID都介紹過一輪了
明天開始會來介紹WEB API
但是還沒有想好要用.net framework
還是 .net core
我比較熟悉.net framework
但是未來趨勢會是 .net core
但怕寫.net Core的文章錯誤會比較多OTZ