第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

依賴注入總是正確的答案嗎?

依賴注入總是正確的答案嗎?

PHP
慕桂英546537 2021-10-22 10:18:34
我目前正在考慮很多關(guān)于依賴注入的問(wèn)題,它有利有弊。一般而言,似乎一致認(rèn)為在大多數(shù)情況下依賴注入是正確的選擇。我看到了它的用處以及它如何使代碼更具可讀性。因此,我試圖用盡可能多的依賴注入來(lái)創(chuàng)建我的類,將關(guān)注點(diǎn)分成多個(gè)對(duì)象。在我 70% 的日常工作中,這很好。它有效,我看到了好處。然而,剩下的 30% 讓我有些掙扎。我對(duì)依賴注入本身的概念沒(méi)有問(wèn)題,但事實(shí)上我認(rèn)為 PHP 確實(shí)有一些“特殊屬性”,這讓我懷疑依賴注入是正確的選擇。主要觀點(diǎn)似乎是使用 DI 而不是服務(wù)定位器的優(yōu)點(diǎn),假設(shè)您有“編譯時(shí)錯(cuò)誤”而不是“運(yùn)行時(shí)錯(cuò)誤”。我明白,對(duì)于 Java 或 C 之類的語(yǔ)言,但 PHP 中沒(méi)有“編譯時(shí)錯(cuò)誤”這樣的東西不會(huì)自動(dòng)導(dǎo)致“運(yùn)行時(shí)錯(cuò)誤”。至少我沒(méi)有遇到過(guò)。在啟動(dòng)一次的程序中,將它們的源加載到內(nèi)存中并在它們被執(zhí)行時(shí)一直保持在那里,我明白你為什么要使用 DI。這是有道理的,您不必(通常)擔(dān)心應(yīng)用程序需要多長(zhǎng)時(shí)間才能達(dá)到運(yùn)行狀態(tài),并且您應(yīng)該(通常)有足夠的內(nèi)存來(lái)保存所有代碼。所以加載所有依賴項(xiàng)并將它們保存在內(nèi)存中似乎沒(méi)問(wèn)題。但是,PHP 腳本在 Apache、NGINX 或其他上下文中使用時(shí),每次用戶訪問(wèn)時(shí)都會(huì)啟動(dòng)。除此之外,我們希望我們的應(yīng)用程序運(yùn)行得盡可能快,用盡可能少的資源來(lái)充分利用服務(wù)器硬件。問(wèn)題是,如果我每次都加載整個(gè)庫(kù),即使我只訪問(wèn)了一小部分代碼,這似乎也很浪費(fèi)......(我在下面有一個(gè)例子來(lái)說(shuō)明我的意思)如上所述,我嘗試盡可能多地使用 DI。但是剩下的 30% 我仍然使用服務(wù)定位器模式來(lái)處理,因?yàn)槲?a.) 只需要在特定條件下的依賴項(xiàng)或 b.) 我訪問(wèn)一個(gè)或多或少可以用全局函數(shù)替代的服務(wù)/助手類。(見(jiàn)下例)在這方面,我閱讀了很多關(guān)于 a.) 助手類是邪惡的 b.) 當(dāng)您在類中只使用一次依賴項(xiàng)時(shí),您應(yīng)該將其拆分為一個(gè)單獨(dú)的類(老實(shí)說(shuō),這是我不知道的一點(diǎn)完全明白,因?yàn)楫?dāng)您使用 DI 時(shí),您無(wú)論如何都必須創(chuàng)建該類,那么為什么要將它與一般類分開(kāi)?)。我創(chuàng)建了一些虛擬代碼來(lái)展示我認(rèn)為(在撰寫本文時(shí))服務(wù)定位器(在 PHP 中)比 DI 更明智的 30%。
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊

沒(méi)有模式總是答案;當(dāng)這些不能被推遲時(shí),做出明智的、務(wù)實(shí)的架構(gòu)決策很重要。

您說(shuō)得對(duì),在 PHP 的情況下,由于必須在每個(gè)請(qǐng)求上實(shí)例化整個(gè)對(duì)象圖,DI 可能會(huì)導(dǎo)致性能損失。

然而,依賴注入顯然與性能無(wú)關(guān)。它是一種實(shí)現(xiàn)控制反轉(zhuǎn)的方法,最終走向模塊化設(shè)計(jì)、關(guān)注點(diǎn)分離、可重用性和可測(cè)試性。這些好處大大超過(guò)了“編譯時(shí)”錯(cuò)誤捕獲能力。

在軟件項(xiàng)目的早期階段,預(yù)測(cè)它是否足夠簡(jiǎn)單(你的 30%)以放棄所有這些好處并采用互連設(shè)計(jì)而不是模塊化設(shè)計(jì)是非常困難和冒險(xiǎn)的。部件緊密耦合,只是名稱或性能。


查看完整回答
反對(duì) 回復(fù) 2021-10-22
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)