Sobes.tech
Junior

Qaramliklarni injektsiyasi (DI) nima?

sobes.tech AI

AIdan javob

Bog'lanishni injektsiya qilish (DI) — bu dizayn shabloni bo'lib, unda komponentning bog'liqliklari tashqaridan ta'minlanadi, o'zlari tomonidan emas. Bu kodning ko'proq moslashuvchanligi, test qilish imkoniyati va saqlash qulayligini ta'minlaydi.

Asosiy tamoyillar:

  • Kontrolni teskari aylantirish (IoC): Komponent o'z bog'liqliklarini yaratmaydi.
  • Mas'uliyatlarni ajratish: Bog'liqliklarni yaratish ularning foydalanishidan ajratilgan.

DI ning afzalliklari:

  • Yaxshiroq test qilish imkoniyati: Haqiqiy bog'liqliklarni testlarda mock'lar bilan oson almashtirish.
  • Bog'lanishni kamaytirish: Komponentlar bir-biriga kamroq bog'liq bo'ladi.
  • Ko'proq moslashuvchanlik va qayta foydalanish: Bog'liqlikning amalga oshirilishini o'zgartirish, komponent kodini o'zgartirmasdan oson.
  • Bog'liqliklarni boshqarishni soddalashtirish: Ayniqsa katta loyihalarda.

Androidda DI ni amalga oshirish usullari:

  1. Qo'lda (Manual DI): Bog'liqliklar konstruktor yoki setterlar orqali uzatiladi.
  2. Frameworklardan foydalanish: Dagger 2, Hilt, Koin. Bu frameworklar bog'liqliklarni yaratish va ta'minlash jarayonini avtomatlashtiradi.

Qo'lda misol:

// Bog'liqlik
interface AnalyticsManager {
    fun trackEvent(eventName: String)
}

// Bog'liqlikni amalga oshirish
class FirebaseAnalyticsManager : AnalyticsManager {
    override fun trackEvent(eventName: String) {
        // Firebase'da kuzatuv logikasi
    }
}

// Bog'liqlikka ehtiyoj sezadigan komponent
class UserRepository(private val analyticsManager: AnalyticsManager) { // Bog'liqlik konstruktor orqali uzatiladi
    fun getUser(userId: String): User? {
        analyticsManager.trackEvent("UserFetched")
        // Foydalanuvchini olish logikasi
        return null
    }
}

// Ob'ektlar yaratiladigan va bog'lanadigan joy
fun main() {
    val analytics: AnalyticsManager = FirebaseAnalyticsManager()
    val userRepository = UserRepository(analytics) // Bog'liqlikni injektsiya qilish
}