依賴注入與哪些事情無關?

任何你使用的現代框架,都可能嚴重依賴於依賴注入。但是你知道依賴注入代表的真正含義嗎?或者換一個更好的角度 - 你知道依賴注入不是什麼嗎?

 

依賴容器

雖然每個現代框架都附帶依賴容器 — 一個用於構建對象的大盒子 — 但這並不能保證你會按照預期的方式使用依賴注入模式。

容器讓依賴項更加容易注入到類中,但是它也可能被濫用。

服務定位器模式

一種濫用服務容器的方式是從容器中拉取對象,而不是注入到當前的上下文中。該模式稱之爲服務定位器模式,它與依賴注入相反。

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等多個知識點高級進階乾貨需要的可以免費分享給大家,需要的可以加入我的官方羣點擊此處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章