Sobes.tech
Middle

Dagger nədir və Android inkişafında nə üçün istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Dagger, Java və Kotlin-də asılılıq inyeksiyası (Dependency Injection - DI) üçün çərçivədir.

Android inkişafında istifadə olunur:

  1. Testlərin sadələşdirilməsi: Testlər zamanı real asılılıqları asanlıqla mock və ya stub ilə əvəz etməyə imkan verir.
  2. Bağlılığın azaldılması: Tətbiq komponentləri bir-birindən daha az asılı olur, bu da kodun dəyişdirilməsi və dəstəklənməsini asanlaşdırır.
  3. Kodun təkrar istifadəsi: Ümumi asılılıqlar tətbiqin müxtəlif hissələrinə asanlıqla təmin edilə bilər.
  4. Obyektlərin həyat dövrünün idarə olunması: Dagger obyektlərin yaradılmasını və həyat dövrünü idarə edə bilər, məsələn, scope-lar istifadə etməklə.
  5. Memarlıq təkmilləşdirmələri: Modulyar və miqyaslana bilən tətbiqlərin qurulmasını təşviq edir.

Dagger tərtib zamanı işləyir, asılılıq inyeksiyasını həyata keçirən kodu yaradır. Bu, refleksiv DI çərçivələrinə nisbətən daha yüksək performansa səbəb olur.

Dagger-ın əsas anlayışları:

  • @Module: Asılılıqları təmin edən sinflər. @Provides ilə işarələnmiş metodlar asılılıq nümunələrini qaytarır.
// Modul nümunəsi
@Module
class AppModule {

    @Provides
    fun provideApiService(): ApiService {
        return ApiService() // ApiService asılılıqdır
    }
}
  • @Component: Asılılıq qrafını təyin edən və inyeksiyaya giriş nöqtələri təmin edən interfeyslər.
// Komponent nümunəsi
@Component(modules = [AppModule::class])
interface AppComponent {

    fun inject(activity: MainActivity) // MainActivity-ə asılılıqları inyeksiya etmək üçün metod
}
  • @Inject: Asılılıqları tələb etmək üçün istifadə olunan annotasiya. Konstruktor, sahə və ya metod üzərində tətbiq oluna bilər.
// @Inject istifadə nümunəsi
class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var apiService: ApiService // ApiService asılılığını tələb edirik

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

        // Asılılıqları in'ektsiya etmək üçün komponent vasitəsilə
        (application as App).appComponent.inject(this)

        // İndi apiService initialized
        apiService.callApi()
    }
}
  • @Scope: Komponent daxilində təmin olunan obyektlərin həyat dövrünü müəyyən edən annotasiyalar, məsələn, @Singleton.

Dagger başlanğıc konfiqurasiya və öyrənmə tələb edir, lakin onun üstünlükləri orta və böyük Android tətbiqlərində öz dəyərini göstərir.