Android 依賴項注入(Dependency injection)

簡要

依賴項注入簡稱:DI

遵循 DI 的原則可以為良好的應用架構奠定基礎

實現依賴項注入可為您帶來以下優勢:

重用代碼
易於重構
易於測試

1. 非依賴項注入 vs 依賴項注入

以下非依賴項注入Android官方範例

class Car {
    private val engine = Engine()

    fun start() {
        engine.start()
    }
}

fun main(args: Array) {
    val car = Car()
    car.start()
}
效果圖

靈活性低,重用性低,測試不方便,需要重建Car才能更換engine

以下依賴項注入Android官方範例

//第一種構造函式注入
class Car(private val engine: Engine) {
    fun start() {
        engine.start()
    }
}

fun main(args: Array) {
    val engine = Engine()
    val car = Car(engine)
    car.start()
}


//第二種字段注入(或 setter 注入)
class Car {
    lateinit var engine: Engine

    fun start() {
        engine.start()
    }
}

fun main(args: Array) {
    val car = Car()
    car.engine = Engine()
    car.start()
}
效果圖

靈活性高,重用性高,測試方便,不需要重建Car,就可以更新engine

以上這些皆為手動依賴項注入

手動依賴像注入缺點,類越多、依賴項越多、項目越大,操作起來越繁瑣,也可能會產生而外的問題

2. 自動依賴項注入

有一些庫通過自動執行創建和提供依賴項的過程解決此問題。它們歸為兩類:

  • 基於反射的解決方案,可在運行時連接依賴項。
  • 靜態解決方案,可生成在編譯時連接依賴項的代碼。

Dagger 是適用於 Java、Kotlin 和 Android 的熱門依賴項注入庫,由 Google 進行維護。 Dagger 為您創建和管理依賴關係圖,從而便於您在應用中使用 DI。它提供了完全靜態和編譯時依賴項,解決了基於反射的解決方案(如 Guice)的諸多開發和性能問題。

在 Android 應用中使用 Hilt

Hilt 是推薦用於在 Android 中實現依賴項注入的 Jetpack 庫。 Hilt 通過為項目中的每個 Android 類提供容器並自動為您管理其生命週期,定義了一種在應用中執行 DI 的標準方法。

Hilt 在熱門 DI 庫 Dagger 的基礎上構建而成,因而能夠受益於 Dagger 提供的編譯時正確性、運行時性能、可伸縮性和 Android Studio 支持。

之後會有幾篇文章介紹Dagger與Hilt

以上內容參考Android 官網


相關文章

Android Dagger基本知識與簡單測試Android 應用中使用Dagger-1
簡要
1. Android使用Dagger前置作業
2. 基本使用方法
簡要
建構方法
Android 應用中使用Dagger-2
1. Dagger 子组件
2. 為子組件分配作用域
3. 構建 Dagger 圖的最佳做法
4. 使用 Dagger 模塊

訂閱Codeilin的旅程,若有最新消息會通知。

廣告

對「Android 依賴項注入(Dependency injection)」的一則回應

Add yours

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

WordPress.com.

向上 ↑

%d 位部落客按了讚: