任何你使用的現代框架,都可能嚴重依賴于依賴注入,但是你知道依賴注入代表的真正含義嗎?或者換一個更好的角度 - 你知道依賴注入不是什么嗎?
依賴容器
雖然每個現代框架都附帶依賴容器 — 一個用于構建物件的大盒子 — 但這并不能保證你會按照預期的方式使用依賴注入模式,
容器讓依賴項更加容易注入到類中,但是它也可能被濫用,
服務定位器模式
一種濫用服務容器的方式是從容器中拉取物件,而不是注入到當前的背景關系中,該模式稱之為服務定位器模式,它與依賴注入相反,
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等多個知識點高級進階干貨需要的可以免費分享給大家,需要的可以加入我的官方群點擊此處,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/45117.html
標籤:PHP
下一篇:PHP使用IMAP讀取郵箱收郵件
