iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
自我挑戰組

C# 從入門到WebApi系列 第 19

[Day19] 淺出Solid 關於依賴倒置原則

  • 分享至 

  • xImage
  •  

依賴倒置原則

英文是 Dependency Inversion Principle(DIP)

他所要描敘的東西跟介面隔離原則有點相似
不過介面隔離原則所強調的是不要強迫使用者去依賴它所不需要的模組
而依賴倒置原則想做的是解除高階模組和低階模組的依賴關係
簡單而言就是解耦

依賴倒置原則大概有三個重點:

  1. 高階模組不應該依賴於低階模組,兩者都該依賴抽象。
  2. 抽象不應該依賴於具體實作方式。
  3. 具體實作方式則應該依賴抽象。

所以在前面的物件導向介紹中
才會一直強調抽象的重要性

我們先來定義什麼是高階和低階模組
高階模組指的是呼叫者(Caller)
低階模組就是被呼叫者(Callee)

我們來看個例子

https://ithelp.ithome.com.tw/upload/images/20200919/20109549k7eGbejdsB.png

我今天開著瑪莎拉蒂
我使用了瑪莎拉蒂在路上跑的功能
因此我是高階模組
瑪莎拉蒂是低階模組

這邊很有趣的是
雖然看起來是我在操縱瑪莎拉蒂
但是實際上卻是我依賴瑪莎拉蒂

在UML圖內
模組A指向模組B
代表A使用B(或繼承實作介面抽象)
雖然看起來是A在用B
但是依賴關係卻是A依賴B

聽完還是有點迷糊嗎
我之前在看別人文章的時候
看見了一個很好的例子
分享給大家

今天有一名8+9在吸食毒品

https://ithelp.ithome.com.tw/upload/images/20200919/20109549g4Y8z5J6gu.png

8+9 以為自己吸食毒品只是滿足自己的快感
他還以為他自己的意志行為是被自己所掌控

錯!!!
其實8+9這時候所有的行為已經被毒品所控制
再也離不開毒品了

很重要 所以放大一點

吸毒有害健康 並且違法犯紀 請勿嘗試

吸毒有害健康 並且違法犯紀 請勿嘗試

吸毒有害健康 並且違法犯紀 請勿嘗試

很重要 所以說三次

如何解除依賴關係

我們今天想要讓8+9改過向上
戒毒成為奮發向上的好青年

因為現在8+9直接依賴著毒品
我們讓8+9改成依賴藥品這個介面

https://ithelp.ithome.com.tw/upload/images/20200919/201095492uJTMXxp3T.png

現在我們成功讓8+9依賴藥品而不是毒品
然後再將做一個健康食品的類別實作藥品
然後偷偷把毒品換成健康食品

https://ithelp.ithome.com.tw/upload/images/20200919/20109549nc1dE4UOiB.png

這樣子8+9以為自己吃的藥品是毒品
實際上卻是每天吃健康食品

於是8+9頭腦變好了 走路也不晃了 考試也考100分
成為國家的棟樑

其實這個例子就是昨天資料庫版的翻版

參考資料

https://notfalse.net/1/dip

我覺得這個部落格中的文章都寫得淺顯易懂
而且例子都很有趣
(可是好久沒有新文章了TAT)

後話

SOLID都介紹過一輪了
明天開始會來介紹WEB API
但是還沒有想好要用.net framework
還是 .net core
我比較熟悉.net framework
但是未來趨勢會是 .net core
但怕寫.net Core的文章錯誤會比較多OTZ


上一篇
[Day18] 淺出Solid 關於介面隔離原則
下一篇
[Day20] 第一支WebApi
系列文
C# 從入門到WebApi30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言