Sobes.tech
Junior

Čo je dependency injection (DI)?

sobes.tech AI

Odpoveď od AI

Vstrekovanie závislostí (DI) je návrhový vzor, pri ktorom sú závislosti komponentu poskytované zvonku, nie sú vytvárané samotnou komponentou. To umožňuje väčšiu flexibilitu, testovateľnosť a udržiavateľnosť kódu.

Hlavné princípy:

  • Invertovanie kontroly (IoC): Komponent neriadi tvorbu svojich závislostí.
  • Oddelenie zodpovedností: Tvorba závislostí je oddelená od ich použitia.

Výhody DI:

  • Vylepšená testovateľnosť: Je ľahké nahradiť reálne závislosti mockmi počas testov.
  • Zníženie prepojenia: Komponenty sú menej závislé od seba.
  • Väčšia flexibilita a opätovné použitie: Je ľahké zmeniť implementáciu závislosti bez zmeny kódu komponentu.
  • Zjednodušené riadenie závislostí: Obzvlášť v veľkých projektoch.

Spôsoby implementácie DI v Android:

  1. Ručne (Manual DI): Závislosti sa odovzdávajú cez konštruktor alebo cez setter.
  2. Použitím frameworkov: Dagger 2, Hilt, Koin. Tieto frameworky automatizujú proces tvorby a poskytovania závislostí.

Príklad ručne:

// Závislosť
interface AnalyticsManager {
    fun trackEvent(eventName: String)
}

// Implementácia závislosti
class FirebaseAnalyticsManager : AnalyticsManager {
    override fun trackEvent(eventName: String) {
        // Logika sledovania vo Firebase
    }
}

// Komponent, ktorý potrebuje závislosť
class UserRepository(private val analyticsManager: AnalyticsManager) { // Závislosť sa odovzdáva cez konštruktor
    fun getUser(userId: String): User? {
        analyticsManager.trackEvent("UserFetched")
        // Logika získania používateľa
        return null
    }
}

// Miesto, kde sa objekty vytvárajú a spájajú
fun main() {
    val analytics: AnalyticsManager = FirebaseAnalyticsManager()
    val userRepository = UserRepository(analytics) // Injektovanie závislosti
}