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:
- Testlarni soddalashtirish: Testlar davomida haqiqiy bog'liqliklarni mock yoki stub bilan oson almashtirish imkonini beradi.
- Bog'liqlikni kamaytirish: Ilova komponentlari bir-biriga kamroq bog'liq bo'lib, kodni o'zgartirish va qo'llab-quvvatlashni osonlashtiradi.
- Kodning qayta ishlatilishi: Umumiy bog'liqliklar ilovaning turli qismlariga osongina taqdim etilishi mumkin.
- Ob'ektlarning hayot aylanishini boshqarish: Dagger ob'ektlarni yaratish va hayot aylanishini boshqarishi mumkin, masalan, scope'lar yordamida.
- 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.@Providesbilan 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.