Junior
Šta je dependency injection (DI)?
sobes.tech АИ
Одговор од АИ
Umetanje zavisnosti (DI) je obrazac dizajna u kojem se zavisnosti komponenti obezbeđuju spolja, a ne same kreiraju. Ovo omogućava veću fleksibilnost, testabilnost i održivost koda.
Osnovni principi:
- Inverzija kontrole (IoC): Komponenta ne upravlja kreiranjem svojih zavisnosti.
- Razdvajanje odgovornosti: Kreiranje zavisnosti je odvojeno od njihove upotrebe.
Prednosti DI:
- Poboljšana testabilnost: Lako je zameniti prave zavisnosti testnim mock-ovima.
- Smanjenje povezanosti: Komponente postaju manje zavisne jedna od druge.
- Veća fleksibilnost i ponovna upotrebljivost: Lako je promeniti implementaciju zavisnosti bez promene koda komponente.
- Pojednostavljeno upravljanje zavisnostima: Posebno u velikim projektima.
Načini implementacije DI u Androidu:
- Ručno (Manual DI): Zavisnosti se prosleđuju kroz konstruktor ili putem settera.
- Korišćenjem framework-ova: Dagger 2, Hilt, Koin. Ovi framework-ovi automatizuju proces kreiranja i obezbeđivanja zavisnosti.
Primer ručno:
// Zavisnost
interface AnalyticsManager {
fun trackEvent(eventName: String)
}
// Implementacija zavisnosti
class FirebaseAnalyticsManager : AnalyticsManager {
override fun trackEvent(eventName: String) {
// Logika praćenja u Firebase
}
}
// Komponenta koja zahteva zavisnost
class UserRepository(private val analyticsManager: AnalyticsManager) { // Zavisnost se prosleđuje kroz konstruktor
fun getUser(userId: String): User? {
analyticsManager.trackEvent("UserFetched")
// Logika dobijanja korisnika
return null
}
}
// Mesto gde se objekti kreiraju i povezuju
fun main() {
val analytics: AnalyticsManager = FirebaseAnalyticsManager()
val userRepository = UserRepository(analytics) // Injektovanje zavisnosti
}