Sobes.tech
Middle

Mis on Dagger ja milleks seda Androidi arenduses kasutatakse?

sobes.tech AI

Vastus AI-lt

Dagger on sõltuvuste süstimise (Dependency Injection - DI) raamistik Java ja Kotlin keeles.

Kasutatakse Android arenduses:

  1. Testimise lihtsustamine: Annab võimaluse hõlpsasti asendada tegelikud sõltuvused mokkide või plahvatustega testimise ajal.
  2. Seotuduse vähendamine: Rakenduse komponendid muutuvad vähem sõltuvaks üksteisest, mis hõlbustab koodi muutmist ja hooldust.
  3. Koodi taaskasutus: Ühised sõltuvused saab hõlpsasti pakkuda erinevatele osadele.
  4. Objektide elutsükli haldamine: Dagger saab hallata objektide loomist ja eluaega, näiteks kasutades scope.
  5. Arhitektuuri parandamine: Toetab moodulite ja skaleeritavate rakenduste ehitamist.

Dagger töötab kompileerimise ajal, genereerides koodi, mis teostab sõltuvuste süstimist. See tagab suurema jõudluse kui refleksiivsed DI raamistikud.

Daggeri põhikonseptsioonid:

  • @Module: klassid, mis pakuvad sõltuvusi. Meetodid, millele on märgitud @Provides, tagastavad sõltuvuste eksemplarid.
    // Mooduli näide
    @Module
    class AppModule {
    
        @Provides
        fun provideApiService(): ApiService {
            return ApiService() // Eeldame, et ApiService on mingi sõltuvus
        }
    }
    
  • @Component: liidesed, mis määratlevad sõltuvusgraafi ja pakuvad juurdepääsupunkte süstimiseks.
    // Komponendi näide
    @Component(modules = [AppModule::class])
    interface AppComponent {
    
        fun inject(activity: MainActivity) // Meetod sõltuvuste süstimiseks MainActivitysse
    }
    
  • @Inject: annotatsioon, mida kasutatakse sõltuvuste taotlemiseks. Seda saab rakendada konstruktorile, väljakule või meetodile.
    // @Inject kasutamise näide
    class MainActivity : AppCompatActivity() {
    
        @Inject
        lateinit var apiService: ApiService // ApiService sõltuvuse taotlus
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            // Sõltuvuste süstimine komponendi kaudu
            (application as App).appComponent.inject(this)
    
            // Nüüd on apiService initsialiseeritud
            apiService.callApi()
        }
    }
    
  • @Scope: annotatsioonid, mis määravad pakutavate objektide elutsükli komponendi sees, näiteks @Singleton.

Dagger nõuab algset seadistust ja õppimist, kuid selle eelised kesk- ja suuremahulistes Android rakendustes õigustavad kulutusi.