在Laravel中,控制反轉的好處是能夠借助IOC容器將具有依賴的模組或物件進行解耦,如果指定的服務不合適使用時,不需要修改開發者定義的方法就可以透過指定的介面找一個合適的服務來替換。
本文操作環境:Windows10系統、Laravel6版、Dell G3電腦。
laravel 自己本身就是一個IOC容器,也叫服務容器,
服務容器就是管理類別的依賴和執行依賴注入的工具
控制反轉的作用就是實作模組或物件的解耦,透過借助第三方將具有依賴的模組或物件進行解耦,而這個第三方,就是IOC容器。
容器嘛,就是儲存了需要的服務在裡面,方便開發者呼叫。所以,Laravel為了方便管理這些服務(實現解耦)決定,不再直接呼叫這些服務,例如開發者定義了一個方法1,原本和服務B綁定,透過服務B實現,現在不要B了,而是定義了一個介面A,透過介面A去實作這個服務B。
在這個過程中,服務B本來可以控制開發者的某個功能,現在開發者不直接呼叫這個服務了,而是換成了介面A,所以,該服務B對該項功能失去了控制權,而介面A獲得了該功能的控制權,這個過程就叫做控制反轉
好處就在於:
如果該服務B不合適了,那麼介面A可以找一個適合需求的其他服務替換上去,不用修改開發者的方法1,至於你接口A用的啥服務,我這方法也不用管。這個介面A要實作服務B,那麼實作服務B的類別就得繼承這個介面A,在這個B類別中實作介面A定義的抽象方法。
這個介面A 也可以被視為該項服務的提供者。 laravel中有多個服務提供者,他們組成對應的元件,多個元件形成這樣一個laravel框架
既然介面A有了,介面BCDE那麼多,要方便管理,就得給規定服務提供者的格式,方法參數,來約束他們的規則,這個概念就叫做:契約
契約的好處:就在於,只要滿足約束規則,就可以按需求隨意替換,
# **Facades,**我們可以叫做門面,其實就是一組靜態介面或代理,能讓開發者簡單的存取綁定到容器中的各種服務。 Laravel 裡面自備了一些 Facades,如Cache等。一個 Facade 就是一個類,使用這個類別可以存取到來自容器裡的一個對象,這個功能就是在 Facade 類別裡面定義的。 Laravel 的 Facades 還有任何你自己定義的 Facades,都會去繼承 Facade 這個類別。通俗來說,你在類上方使用的use xxxx 都屬於門面,詳情看鏈接:https://www.jianshu.com/p/a96715975d4e
那麼,如果我要實現的服務這裡沒有怎麼辦,那就需要將新來的服務進行註冊和初始化,只有註冊到容器中了,容器才能呼叫它,這個工作由服務提供者來實現。迴歸正題
那依賴注入是什麼:開發者的這個方法1,定義了一個中間商介面A,這個介面A可以以參數形式,注入方法1所屬類別1的建構方法儲存起來,這個過程就叫做依賴注入。
只要不是由內部生產(例如初始化、建構函數__construct 中透過工廠方法、自行手動new 的),而是由外部以參數或其他形式註入的,都屬於依賴注入
我們要如何做依賴注入呢?很簡單: $biller = new StripeBiller(new SmsNotifier);
這就是一個依賴注入。帳單類別 StripeBiller 不用考慮如何通知用戶,我們直接傳遞給它一個通知實作類別 SmsNotifier
的實例。從程式碼角度來說,這可能只是個微小的變動,但這種設計模式的引入,絕對會使你的整個應用架構煥然一新:因為明確指定了類別的職責邊界,實現了不同層和服務之間的解耦,你的程式碼變得更加容易維護;此外,從面向介面程式設計的角度來看,程式碼變得更加容易測試,你只需透過模擬注入依賴即可,不同類別之間的測試完全可以隔離開來
【相關推薦:laravel影片教學】
以上是Laravel控制反轉的好處是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!