Sobes.tech
Junior

Kas yra dependency injection (DI)?

sobes.tech AI

Atsakymas iš AI

Priklausomybės injekcija (DI) — tai projektavimo šablonas, kai komponento priklausomybės tiekiamos iš išorės, o ne sukuriamos pačios. Tai leidžia pasiekti didesnį lankstumą, testuojamumą ir palaikymą.

Pagrindiniai principai:

  • Kontrolės inversija (IoC): Komponentas nesukuria savo priklausomybių.
  • Atsakomybės atskyrimas: Priklausomybių kūrimas atskirtas nuo jų naudojimo.

DI privalumai:

  • Pagerintas testavimas: Lengva pakeisti realias priklausomybes testinėmis mock'ais.
  • Sumažintas sujungimas (coupling): Komponentai tampa mažiau priklausomi vienas nuo kito.
  • Didesnis lankstumas ir pakartotinis naudojimas: Lengva pakeisti priklausomybės įgyvendinimą be kodo keitimo.
  • Priklausomybių valdymo palengvinimas: Ypač dideliuose projektuose.

DI įgyvendinimo būdai Android:

  1. Rankinis (Manual DI): Priklausomybės perduodamos per konstruktorių arba seterius.
  2. Naudojant karkasus: Dagger 2, Hilt, Koin. Šie karkasai automatizuoja priklausomybių kūrimo ir teikimo procesą.

Pavyzdys rankiniu būdu:

// Priklausomybė
interface AnalyticsManager {
    fun trackEvent(eventName: String)
}

// Priklausomybės įgyvendinimas
class FirebaseAnalyticsManager : AnalyticsManager {
    override fun trackEvent(eventName: String) {
        // Firebase sekimo logika
    }
}

// Komponentas, kuriam reikalinga priklausomybė
class UserRepository(private val analyticsManager: AnalyticsManager) { // Priklausomybė perduodama per konstruktorių
    fun getUser(userId: String): User? {
        analyticsManager.trackEvent("UserFetched")
        // Vartotojo gavimo logika
        return null
    }
}

// Vietą, kur sukuriami ir sujungiami objektai
fun main() {
    val analytics: AnalyticsManager = FirebaseAnalyticsManager()
    val userRepository = UserRepository(analytics) // Priklausomybės injekcija
}