任何你使用的現代框架,都可能嚴重依賴於依賴注入。但是你知道依賴注入代表的真正含義嗎?或者換一個更好的角度 - 你知道依賴注入不是什麼嗎?
依賴容器
雖然每個現代框架都附帶依賴容器 — 一個用於構建對象的大盒子 — 但這並不能保證你會按照預期的方式使用依賴注入模式。
容器讓依賴項更加容易注入到類中,但是它也可能被濫用。
服務定位器模式
一種濫用服務容器的方式是從容器中拉取對象,而不是注入到當前的上下文中。該模式稱之爲服務定位器模式,它與依賴注入相反。
class MyController
{
public function indexAction()
{
$service = app(Service::class);
// …
}
}
服務定位器模式向容器請求特定的對象。這將導致服務從一個難以測試的點拉取,並且,對於外部而言這就像一個黑匣子:除非你查看全部相關代碼,否則你將無法瞭解 MyController 所依賴的外部類型。
一些框架提倡這種用法,因爲在項目開始的時候它將變得簡單快捷。一旦在容器中註冊了成百上千個類,使用服務定位器模式將會導致混亂。而使用依賴注入將解決該問題。
更多信息,可查看我寫的這篇博客: 爲什麼服務定位器模式是反模式.
依賴共享
接下來是一些更積極的方面:以一種更好的方式使用容器。
當依賴注入被正確使用時,外部上下文 (在許多情況下爲容器) 可以控制注入到類中的具體依賴項。 這意味着同一個對象可以被注入到其他幾個上下文中,而不需要知道這些上下文是「單例」還是「依賴共享」。
雖然依賴共享是有用且強大的,但它並不是依賴注入的真正目的,而只是一個有益的副作用。
自動裝配
最後,另一個有用的特性,同樣不是依賴注入的內容:自動裝配。
爲了給予開發人員更多的靈活性,一些容器允許智能的、自動的確定類的定義。這意味着您不必手動描述應該如何構造每個類。這些容器將掃描您的代碼,並通過查看類型提示和文檔塊來確定需要哪些依賴項。
這裏發生了很多神奇的事情,但是自動裝配對於應用程序的快速開發來說是一個非常有用的工具。
如果您現在還想重溫一下什麼是依賴注入的基礎知識。你可以去閱讀它這裏.
更多學習內容請訪問:
騰訊T3-T4標準精品PHP架構師教程目錄大全,只要你看完保證薪資上升一個臺階(持續更新)
以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裏入手去提升,對此我整理了一些資料,包括但不限於:分佈式架構、高可擴展、高性能、高併發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階乾貨需要的可以免費分享給大家,需要的可以加入我的官方羣點擊此處。