[心得整理] c# 物件導向程式 - 8.DIP 依賴反轉原則

[心得整理] 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 的原文解釋真的非常難懂,高階低階的文言文,我用很簡單的方式去說明,但細節上就沒多說了
請透過推薦閱讀有非常棒的文章

推薦閱讀

[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day22 - DIP 依賴反轉原則

亂談軟體設計(5):Dependency-Inversion Principle

如果內容有誤請多鞭策謝謝