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

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

什么是依賴注入?

什么是依賴注入?

什么是依賴注入?什么是依賴注入以及何時(shí)/為什么應(yīng)該或不應(yīng)該使用它?
查看完整描述

5 回答

?
函數(shù)式編程

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

到目前為止,我發(fā)現(xiàn)的最佳定義是James Shore

對(duì)于5美分的概念,“依賴注入”是一個(gè)25美元的術(shù)語。[...]依賴注入意味著為對(duì)象提供其實(shí)例變量。[...]。

目前由Martin Fowler的一篇文章,可能證明是有用的,太。

依賴注入基本上是提供對(duì)象所需的對(duì)象(其依賴關(guān)系),而不是讓它自己構(gòu)造它們。這是一種非常有用的測(cè)試技術(shù),因?yàn)樗试S模擬或刪除依賴項(xiàng)。

可以通過多種方式(例如構(gòu)造函數(shù)注入或setter注入)將依賴項(xiàng)注入到對(duì)象中。甚至可以使用專門的依賴注入框架(例如Spring)來做到這一點(diǎn),但它們當(dāng)然不是必需的。您不需要這些框架具有依賴注入。顯式地實(shí)例化和傳遞對(duì)象(依賴關(guān)系)與框架注入一樣好。


查看完整回答
反對(duì) 回復(fù) 2019-05-22
?
慕田峪7331174

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

依賴注入是一種實(shí)踐,其中對(duì)象的設(shè)計(jì)方式是從其他代碼段接收對(duì)象的實(shí)例,而不是在內(nèi)部構(gòu)造它們。這意味著可以替換實(shí)現(xiàn)對(duì)象所需的接口的任何對(duì)象而無需更改代碼,這簡(jiǎn)化了測(cè)試并改善了解耦。

例如,考慮以下條款:

public class PersonService {
  public void addManager( Person employee, Person newManager ) { ... }
  public void removeManager( Person employee, Person oldManager ) { ... }
  public Group getGroupByManager( Person manager ) { ... }}public class GroupMembershipService() {
  public void addPersonToGroup( Person person, Group group ) { ... }
  public void removePersonFromGroup( Person person, Group group ) { ... }}

在這個(gè)例子中,執(zhí)行PersonService::addManager并且PersonService::removeManager需要一個(gè)實(shí)例GroupMembershipService才能完成它的工作。如果沒有依賴注入,傳統(tǒng)的方法是GroupMembershipService在構(gòu)造函數(shù)中實(shí)例化一個(gè)new ,PersonService并在兩個(gè)函數(shù)中使用該實(shí)例屬性。但是,如果構(gòu)造函數(shù)GroupMembershipService有多個(gè)需要的東西,或者更糟糕的是,有一些初始化的“setter”需要調(diào)用GroupMembershipService,代碼增長(zhǎng)得相當(dāng)快,PersonService現(xiàn)在不僅取決于GroupMembershipService而且還取決于其他所有東西。GroupMembershipService依賴于取決于。此外,鏈接到GroupMembershipService硬編碼,PersonService這意味著你不能“假裝”aGroupMembershipService 用于測(cè)試目的,或在應(yīng)用程序的不同部分使用策略模式。

使用依賴注入,而不是實(shí)例化GroupMembershipService你的內(nèi)部PersonService,你要么將它傳遞給PersonService構(gòu)造函數(shù),要么添加一個(gè)Property(getter和setter)來設(shè)置它的本地實(shí)例。這意味著你PersonService不再需要擔(dān)心如何創(chuàng)建一個(gè)GroupMembershipService,它只接受它給出的那些,并與它們一起工作。這也意味著任何作為接口的子類GroupMembershipService或?qū)崿F(xiàn)GroupMembershipService接口的東西都可以“注入” PersonService,并且PersonService不需要知道變化。


查看完整回答
反對(duì) 回復(fù) 2019-05-22
?
神不在的星期二

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

接受的答案是一個(gè)很好的答案 - 但我想補(bǔ)充一點(diǎn),DI非常類似于代碼中經(jīng)典的避免硬編碼常量。

當(dāng)您使用某個(gè)常量(如數(shù)據(jù)庫(kù)名稱)時(shí),您可以快速將其從代碼內(nèi)部移動(dòng)到某個(gè)配置文件,并將包含該值的變量傳遞到需要它的位置。這樣做的原因是這些常量通常比其余代碼更頻繁地更改。例如,如果您想測(cè)試測(cè)試數(shù)據(jù)庫(kù)中的代碼。

DI在面向?qū)ο缶幊填I(lǐng)域類似于此。那里的值而不是常量文字是整個(gè)對(duì)象 - 但是將類代碼從類代碼中創(chuàng)建出來的代碼的原因是相似的 - 對(duì)象的更改頻率比使用它們的代碼更頻繁。需要進(jìn)行此類更改的一個(gè)重要案例是測(cè)試。


查看完整回答
反對(duì) 回復(fù) 2019-05-22
  • 5 回答
  • 0 關(guān)注
  • 2482 瀏覽
慕課專欄
更多

添加回答

舉報(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)