[心得整理] c# 物件導向程式 - 8.DIP 依賴反轉原則
前言
介紹DIP 依賴反轉原則之前,對於介面(抽象觀念)還不太了解的可以參考之前寫的介紹
[心得整理] c# 物件導向程式 - 3.抽象與interface
依賴反轉原則 - 現實生活面
要用於現實生活中,就是抽象的觀念,在某些情境中我們會用抽象
像是 借我手機,要送什麼禮物,我們需要超級英雄保護,我們不會說實體物件時就是用了抽象詞彙
依賴反轉原則 - 程式面
依賴抽象(new 給 介面)
直接看code 跟註解吧
//一般寫法
//依賴 鋼鐵人(實做)
鋼鐵人 tony = new 鋼鐵人();
string temp2 = tony.攻擊();
//DIP => new 給介面
//依賴 I復仇者聯盟(抽象)
I復仇者聯盟 hero1 = new 鋼鐵人();
string temp3 = hero1.攻擊();
//IOC 控制反轉 => 讓別人幫你new
//依賴 I復仇者聯盟(抽象) 由 復仇者工廠 決定實做類別
I復仇者聯盟 hero2 = 復仇者工廠.呼叫復仇者("鋼鐵人");
string temp4 = hero2.攻擊();
//DI 依賴注入 (建構子注入) => 把介面當參數傳
神盾局 SHIELD = new 神盾局(hero2);
string temp5 = SHIELD.超級英雄攻擊();
除了DIP之外,我還放了IOC跟DI的部份, 因為這觀念是連續的,希望之後有機會寫IOC跟DI的部份
註解的部份 我有列出一些,我想出來方便記憶的說明
DIP => new 給介面
IOC => 讓別人幫你new
DI => 把介面當參數傳
但是IOC跟DI詳細內容,還是需要去理解(上Bill叔的課學更快)
對我來說
DIP 依賴反轉原則,對於如何把類別抽象化(介面)
當有了介面,就有了彈性可抽換可測試
DIP 依賴反轉原則,對於如何把類別抽象化(介面)
當有了介面,就有了彈性可抽換可測試
結語
DIP 的原文解釋真的非常難懂,高階低階的文言文,我用很簡單的方式去說明,但細節上就沒多說了
請透過推薦閱讀有非常棒的文章
推薦閱讀
[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day22 - DIP 依賴反轉原則
亂談軟體設計(5):Dependency-Inversion Principle
如果內容有誤請多鞭策謝謝