Sobes.tech
Junior

Mis on dependency injection (DI)?

sobes.tech AI

Vastus AI-lt

Sõltuvuste süstimine (DI) on disainimuster, kus komponendi sõltuvused tarnitakse väljastpoolt, mitte ei loo neid ise. See võimaldab saavutada suuremat paindlikkust, testitavust ja hooldatavust.

Peamised põhimõtted:

  • Kontrolli pööramine (IoC): Komponent ei halda oma sõltuvuste loomist.
  • Vastutuse jaotamine: Sõltuvuste loomine on eraldatud nende kasutamisest.

DI eelised:

  • Paranenud testitavus: Lihtne asendada reaalset sõltuvust testimise mock-objektidega.
  • Sidumise vähendamine (coupling): Komponendid muutuvad vähem sõltuvaks üksteisest.
  • Paindlikkus ja korduvkasutus: Sõltuvuse teostust on lihtne muuta ilma koodi muutmata.
  • Sõltuvuste haldamise lihtsustamine: Eriti suurtes projektides.

Androidis DI rakendamise viisid:

  1. Käsitsi (Manual DI): Sõltuvused edastatakse konstruktorile või setteritele.
  2. Raamistike kasutamine: Dagger 2, Hilt, Koin. Need raamistikud automatiseerivad sõltuvuste loomise ja tarnimise protsessi.

Käsitsi näide:

// Sõltuvus
interface AnalyticsManager {
    fun trackEvent(eventName: String)
}

// Sõltuvuse teostus
class FirebaseAnalyticsManager : AnalyticsManager {
    override fun trackEvent(eventName: String) {
        // Firebase jälgimise loogika
    }
}

// Komponent, millele on vaja sõltuvust
class UserRepository(private val analyticsManager: AnalyticsManager) { // Sõltuvus edastatakse konstruktoriga
    fun getUser(userId: String): User? {
        analyticsManager.trackEvent("UserFetched")
        // Kasutaja saamise loogika
        return null
    }
}

// Koht, kus objektid luuakse ja ühendatakse
fun main() {
    val analytics: AnalyticsManager = FirebaseAnalyticsManager()
    val userRepository = UserRepository(analytics) // Sõltuvuse süstimine
}