Sobes.tech
Middle

რა არის Dagger და რა მიზნით გამოიყენება Android-ის განვითარებაში?

sobes.tech AI

პასუხი AI-სგან

Dagger — Java һәм Kotlin телдәрендә бәйлелек кертү (Dependency Injection - DI) өчен framework.

Android үсешендә кулланыла:

  1. Тестлауны җиңеләйтү: Реаль бәйлелекләрне моклар яки шылтыратмалар белән җиңел алыштыру мөмкинлеге бирә.
  2. Бәйләнешне киметү: Аппликация компонентлары бер-берсенә аз бәйле була, бу кодны үзгәртү һәм хезмәт күрсәтүне җиңеләйтә.
  3. Кодны кабат куллану: Гомуми бәйлелекләрне төрле өлешләргә җиңел тәэмин итү.
  4. Объектларның тормыш циклын идарә итү: Dagger объектларны ясау һәм тормыш вакытын идарә итә ала, мәсәлән, scope-лар кулланып.
  5. Архитектураны камилләштерү: Модульле һәм масштаблы кушымталар төзүгә ярдәм итә.

Dagger компиляция вакытында эшли, бәйлелек кертү кодын генерирә, бу рефлексив DI framework-лар белән чагыштырганда югарырак нәтиҗәлелеккә китерә.

Dagger төп концепцияләре:

  • @Module: бәйлелекләр тәэмин итә торган класслар. @Provides билгеләнгән методлар бәйлелек үрнәкләрен кайтара.
    // Модуль үрнәге
    @Module
    class AppModule {
    
        @Provides
        fun provideApiService(): ApiService {
            return ApiService() // ApiService — бәйлелек үрнәге
        }
    }
    
  • @Component: бәйлелек графын билгели һәм керү нокталарын тәэмин итә.
    // Компонент үрнәге
    @Component(modules = [AppModule::class])
    interface AppComponent {
    
        fun inject(activity: MainActivity) // MainActivity-га бәйлелек кертү
    }
    
  • @Inject: бәйлелек соравы өчен билге. Конструкторга, кырга яки ысмага кулланылырга мөмкин.
    // @Inject куллану үрнәге
    class MainActivity : AppCompatActivity() {
    
        @Inject
        lateinit var apiService: ApiService // ApiService бәйлелеген сорау
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            // Бәйлелекләрне кертү
            (application as App).appComponent.inject(this)
    
            // хәзер apiService инициализацияләнгән
            apiService.callApi()
        }
    }
    
  • @Scope: билгеле бер компонент эчендә бирелгән объектларның тормыш циклын билгели, мәсәлән, @Singleton.

Dagger башлангыч көйләү һәм өйрәнүне таләп итә, әмма аның өстенлекләре урта һәм зур Android кушымталарында акыллы чыгымнарны аклый.