日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

依赖注入–字段vs构造函数vs方法

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 依赖注入–字段vs构造函数vs方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嗨,今天,我想簡單地討論將依賴項注入您的類的不同方式。

通常,您有以下三種注射方法

  • 直接進入字段/屬性
  • 通過顯式的setter方法
  • 通過顯式的構造函數參數


現場注入

這種類型的注入為將所需的依賴項注入到類中提供了某種反射機制。

盡管這種注入類型的好處是,它消除了諸如setter方法或構造函數參數之類的混亂代碼,但其缺點是這些依賴性是不可見的。 如果從外部查看類,則只會看到公共方法,并且可能是構造函數。

即使這使您非常清楚地了解了類提供的服務,但在我看來,它仍然具有以下主要缺點:

在為此特定類編寫測試時,您必須檢查該類以查看所需的依賴項,并且必須使用DI框架(即使是簡單的測試),也必須使用一種反射機制來注入依賴項(模擬/存根/真實)。

更糟糕的是,傳入依賴項的數量隱藏在該類中。 當然,您可以使用工具(JDepend等,pp。)告訴您依賴性的數量和方向,或者使用一個文件來指定注入,但是您必須依靠這種工具或檢查類。

我觀察到的另一個缺點是,與使用Setter或Constructor Injection的情況相比,創建具有多個職責的類的機會更高。
就像是:

哦,讓我們使用這個精美的注解在這里注入我們需要的服務...幾天/幾小時后:測試這種野獸是如此的困難

二傳手注射

注入器注入工具注入器方法,每個依賴項一個,DI框架用于注入依賴項。

這是一個變體,它使依賴項顯式顯示,并且使您可以清楚地了解特定類的依賴項。

在測試過程中,它的好處是您不必使用DI框架或反射機制,而可以直接設置依賴項。

這種方法的缺點是:您可以構造處于無法使用狀態的類。 這是因為如果需要或可選依賴項,則無法與外部區分開。

構造函數注入

構造函數注入對類的構造函數進行檢測,DI框架使用該類來注入依賴項。 這是使依賴關系明確的另一個變體。

與Setter注入相反,它可以防止您在不規則狀態下創建類。 (當然,您可以傳遞null,但這不僅僅是一種作弊,對嗎?)所以我要說,這是最嚴格的變體:

每個依賴項都是強制性的

這種注射類型的好處是

  • 您必須只閱讀一種方法,即構造函數,才能弄清楚此類的依賴關系。
  • 您創建了一個不可變的類,它使緩存變得如此簡單
  • 同樣,這里的缺點是您無法區分可選依賴項和必需依賴項。 構造函數強制設置所有字段。

    我要討論的最后一個變體是:

    混合二傳手和構造劑注射

    我個人更喜歡此變體,混合了Setter和Constructor注入。

    這給您:

    • 在合同級別上區分強制性依賴項和可選性的能力
    • 清楚說明特定類的依賴項是什么
    • 使您可以輕松地檢查班級是否負有重大責任
    • 構建后正確配置的類

    與純方法類似,使用這種注入進行測試非常簡單。 您不需要DI框架,并且可以輕松地將模擬的/存根的/真實的實現傳遞到要測試的類中。

    使用/喜歡什么?

    這個答案在很大程度上取決于您的框架/團隊規則/語言。

    但是我強烈建議您使用顯式注入變量之一,因為它們使您無需使用依賴注入框架即可編寫純單元測試。

    翻譯自: https://www.javacodegeeks.com/2015/01/dependency-injection-field-vs-constructor-vs-method.html

    總結

    以上是生活随笔為你收集整理的依赖注入–字段vs构造函数vs方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。