Sobes.tech
Junior

Ce este injecția de dependențe (DI)?

sobes.tech AI

Răspuns de la AI

Injecția de dependințe (DI) este un model de proiectare în care dependențele unui component sunt furnizate din exterior, în loc să fie create de acesta. Acest lucru permite o mai mare flexibilitate, testabilitate și întreținere a codului.

Principii de bază:

  • Inversarea controlului (IoC): Componenta nu gestionează crearea dependențelor sale.
  • Separarea responsabilităților: Crearea dependențelor este separată de utilizarea lor.

Avantajele DI:

  • Testare îmbunătățită: Este ușor să înlocuiți dependențele reale cu mock-uri în timpul testelor.
  • Reducerea cuplajului: Componentele devin mai puțin dependente unele de altele.
  • Flexibilitate și reutilizare crescută: Este ușor să schimbați implementarea unei dependențe fără a modifica codul componentului.
  • Gestionare simplificată a dependențelor: În special în proiecte mari.

Moduri de implementare DI în Android:

  1. Manual (DI manual): Dependențele sunt transmise în constructor sau prin setters.
  2. Folosind framework-uri: Dagger 2, Hilt, Koin. Aceste framework-uri automatizează procesul de creare și furnizare a dependențelor.

Exemplu manual:

// Dependență
interface AnalyticsManager {
    fun trackEvent(eventName: String)
}

// Implementarea dependenței
class FirebaseAnalyticsManager : AnalyticsManager {
    override fun trackEvent(eventName: String) {
        // Logica de urmărire în Firebase
    }
}

// Componenta care are nevoie de dependență
class UserRepository(private val analyticsManager: AnalyticsManager) { // Dependența este transmisă prin constructor
    fun getUser(userId: String): User? {
        analyticsManager.trackEvent("UserFetched")
        // Logica de obținere a utilizatorului
        return null
    }
}

// Locul unde se creează și se leagă obiectele
fun main() {
    val analytics: AnalyticsManager = FirebaseAnalyticsManager()
    val userRepository = UserRepository(analytics) // Injecție de dependență
}