Sobes.tech
Middle

Dagger nima va Android dasturlashda nima uchun ishlatiladi?

sobes.tech AI

AIdan javob

Dagger Java va Kotlin uchun bog'liqliklarni in'ektsiya qilish (Dependency Injection - DI) uchun frameworkdir.

Android dasturlashda quyidagilar uchun ishlatiladi:

  1. Testlarni soddalashtirish: Testlar davomida haqiqiy bog'liqliklarni mock yoki stub bilan oson almashtirish imkonini beradi.
  2. Bog'liqlikni kamaytirish: Ilova komponentlari bir-biriga kamroq bog'liq bo'lib, kodni o'zgartirish va qo'llab-quvvatlashni osonlashtiradi.
  3. Kodning qayta ishlatilishi: Umumiy bog'liqliklar ilovaning turli qismlariga osongina taqdim etilishi mumkin.
  4. Ob'ektlarning hayot aylanishini boshqarish: Dagger ob'ektlarni yaratish va hayot aylanishini boshqarishi mumkin, masalan, scope'lar yordamida.
  5. Arxitektura yaxshilanishlari: Modulyar va kengaytiriladigan ilovalarni qurishni rag'batlantiradi.

Dagger kompilatsiya vaqtida ishlaydi, bog'liqliklarni in'ektsiya qilishni amalga oshiradigan kodni ishlab chiqaradi. Bu refleksiv DI frameworklariga qaraganda yuqori ishlashga olib keladi.

Daggerning asosiy tushunchalari:

  • @Module: Bog'liqliklarni ta'minlaydigan sinflar. @Provides bilan belgilangan metodlar bog'liqlik nusxalarini qaytaradi.
// Modul misoli
@Module
class AppModule {

    @Provides
    fun provideApiService(): ApiService {
        return ApiService() // ApiService - bog'liqlik
    }
}
  • @Component: Bog'liqlik grafigini belgilovchi va in'ektsiya nuqtalarini ta'minlovchi interfeyslar.
// Komponent misoli
@Component(modules = [AppModule::class])
interface AppComponent {

    fun inject(activity: MainActivity) // MainActivity ga bog'liqliklarni in'ektsiya qilish uchun metod
}
  • @Inject: Bog'liqliklarni so'rash uchun ishlatiladigan annotatsiya. Konstruktor, maydon yoki metodga qo'llanilishi mumkin.
// @Inject dan foydalanish misoli
class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var apiService: ApiService // ApiService bog'liqligini so'raymiz

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Bog'liqliklarni in'ektsiya qilish
        (application as App).appComponent.inject(this)

        // Endi apiService initialized
        apiService.callApi()
    }
}
  • @Scope: Komponent ichida taqdim etilayotgan ob'ektlarning hayot aylanishini belgilovchi annotatsiyalar, masalan, @Singleton.

Dagger boshlang'ich sozlash va o'rganishni talab qiladi, ammo uning afzalliklari o'rtacha va katta Android ilovalarida o'z qiymatini to'laydi.