什麼是依賴注入

Richard852555發表於2022-11-09

作者:youngxs
轉載:www.jianshu.com/p/31b299bf04d8
把有依賴關係的類放到容器中,解析出這些類的例項,就是依賴注入。目的是實現類的解耦。

例項:Class A中用到了Class B的物件b,一般情況下,需要在A的程式碼中顯式的new一個B的物件。採用依賴注入技術之後,A的程式碼只需要定義一個私有的B物件,不需要直接new來獲得這個物件,而是透過相關的容器控制程式來將B物件在外部new出來並注入到A類裡的引用中。這樣做有什麼好處呢?

解釋:假如現在有N多個類,需要用到Class B,那就需要在類裡面例項化N多次,這樣對於後期的維護和管理都是不方便的,如果後期需求發生改變,那更改量有大很多。

依賴注入的具體實現:

Laravel

依賴注入程式碼

上面程式碼中的就是依賴注入,現在又有一個問題,假如,現在類b中的b方法現在改名為c了,那a類裡面的a方法中,就要將b類中呼叫的b方法改成c方法。那依舊涉及到那個問題,如果有N多個類要用到B類呢?那需要做的也是去N多個類中不斷得去改,這樣對後期得維護,需求更改都是要花費很大的成本。

因此,PHP中有一個介面類的說法,介面類:

PHP介面(interface)的特點

1、介面的方法必須是公開的。

2、介面的方法預設是抽象的,所以不在方法名前面加abstract。

3、介面可以定義常量,但不能定義成員屬性,常量的定義和用法和類中常量一樣。

4、類可以實現多個介面(相當於把多個功能集於一身,如手機實現了小靈通、MP3、MP4的功能)

5、介面也可以繼承介面。

不多做解釋,直接貼程式碼:

Laravel

圖中可以看到,b類是一個介面類,c,d繼承了b類,介面類的具體規則,則可以自己百度一下,程式碼中,我們延續了,第一圖的程式碼做為修改,把普通類,改為介面類來實現依賴注入,就能解決那個遺留的問題,當依賴注入的類中的方法,改變了,那我們需要做的就是,在原有的類中,建立一個子類,接著寫上相同得方法,然後在方法中寫上需要的內容和邏輯就行了,當需要得時候,直接例項化,然後注入到需要的類中就行,哪怕是那些類中原有存在的方法都不需要更改。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章