這個設計原則,你認同嗎?

語言: CN / TW / HK

前言

我們都知道依賴注入的方式常見的主要有三種

  1. 建構函式注入
  2. 屬性注入
  3. 介面注入

在大名鼎鼎的 Spring 框架中大量使用屬性注入的方式,屬性注入的方式寫起來那是真的爽;而在 Asp.NetCore 中則不支援屬性注入,如果不使用第三方庫,我們就只能在建構函式上寫上一堆引數,比較麻煩,有些人是非常討厭這種注入方式,選擇使用第三方 IOC 框架。

思考一個問題

Asp.Net Core 框架哪哪都牛逼,可偏偏不支援很多人崇尚的屬性注入呢?如果你還在期待什麼時候支援這一特性,可能會讓你失望了。但也不排除社群呼聲很高的情況下支援這個特性。但這屬性注入它不是推薦的方式。

顯式依賴關係

方法和類應顯式要求正常工作所需的任何協作物件 。 我將此稱為 顯式依賴關係原則 。通過類建構函式,類可以標識其實現有效狀態和正常工作所需的內容。 如果定義的類可供構造和呼叫,但僅在具備特定全域性元件或基礎結構元件時正常工作,則這些類對其客戶端而言就不誠實。 建構函式協定將告知客戶端,它只需要指定的內容(如果類只使用無引數建構函式,則可能不需要任何內容),但隨後在執行時,結果發現物件確實需要某些其他內容。

若遵循顯式依賴關係原則,類和方法就會誠實地告知客戶端其需要哪些內容才能工作。 遵循此原則可以讓程式碼更好地自我記錄,並讓程式碼協定更有利於使用者,因為使用者相信只要他們以方法或建構函式引數的形式提供所需的內容,他們使用的物件在執行時就能正常工作。

總結

如果你你贊成這一設計原則,那就不要折騰地去實現屬性注入了,不僅僅是在依賴注入這一場景,在其他時候我們應該遵循這一原則地初衷,請儘量把你方法或類中依賴的物件大大方方的顯示宣告出來。

您怎麼看待這個問題?

引用:

  1. https://docs.microsoft.com/zh-cn/dotnet/architecture/modern-web-apps-azure/architectural-principles#explicit-dependencies