Sobes.tech
Middle

Компонентҳо ва модулҳо дар Dagger барои чӣ лозиманд?

sobes.tech AI

Ҷавоб аз AI

Компонентҳо (Components) ва модулҳо (Modules) дар Dagger унсурҳои калидии чаҳорчӯбаи идоракунии вобастагиҳо дар барномаҳои Android мебошанд.

Модулҳо (Modules):

  • Инҳо синфҳое мебошанд, ки бо анотацияи @Module нишон дода шудаанд.
  • Онҳо масъуланд барои фароҳам овардани (провайдинг) нусхаҳои объектҳо, яъне эҷоди вобастагиҳо.
  • Методҳо дар модул, ки бо @Provides нишон дода шудаанд, ба Dagger нишон медиҳанд, ки чӣ гуна як навъ махсуси объектро эҷод кунад.
  • Модулҳо логикаи эҷоди вобастагиҳоро гурӯҳбандӣ мекунанд, ки кодро муташаккил ва тестшавандатар месозад.
@Module
public class AppModule {

    @Provides // Даггерро нишон медиҳад, ки чӣ гуна Context-ро эҷод кунад
    Context providesContext(Application application) {
        return application.getApplicationContext();
    }

    @Provides // Даггерро нишон медиҳад, ки чӣ гуна SomeApi-ро эҷод кунад
    SomeApi providesSomeApi(Retrofit retrofit) {
        return retrofit.create(SomeApi.class);
    }
}

Компонентҳо (Components):

  • Инҳо интерфейсҳо ё синфҳои абстрактӣ мебошанд, ки бо @Component нишон дода шудаанд.
  • Онҳо модулҳоро бо синфҳое, ки бояд вобастагиҳо дар онҳо ворид шаванд (масалан, Activities, Fragments, Services), пайваст мекунанд.
  • Компонентҳо ҳамчун "графи вобастагиҳо" хизмат мекунанд, ки вобастагиҳоро ҷамъоварӣ ва фароҳам меоранд аз модулҳои зикршуда.
  • Методҳо дар компонентҳо, ки бе параметрҳо ҳастанд (методҳои иҳота), ба Dagger нишон медиҳанд, ки вобастагиҳоро дар кадом синф бояд ворид кард.
  • Методҳо дар компонентҳо, ки навъи онро бармегардонанд (методҳои провайд), имкон медиҳанд, ки нусхаи вобастагиро аз граф гирем.
  • Анотацияи @Component(modules = { ... }) нишон медиҳад, ки кадом модулҳоро компонент истифода мебарад барои фароҳам овардани вобастагиҳо.
@Component(modules = AppModule.class) // Компонент аз AppModule истифода мекунад
public interface AppComponent {

    // Метод иҳота: Dagger вобастагиҳоро ба MainActivity ворид мекунад
    void inject(MainActivity activity);

    // Метод провайд: имкон медиҳад, ки нусхаи SomeApi-ро аз граф гирем
    SomeApi someApi();
}

Муносибат:

  • Компонентҳо модулҳоро барои гирифтани дастурҳо дар бораи чӣ гуна эҷод кардани объектҳо (вобастагиҳо) истифода мебаранд.
  • Пас аз он, онҳо ин объектҳои эҷодшударо ба синфҳое, ки ба онҳо ниёз доранд, тавассути иҳота ё методҳои провайд пешниҳод мекунанд.
  • Ин сохтори дуқабата (модулҳо барои эҷод, компонентҳо барои пайваст кардан) имкон медиҳад, ки идоракунии вобастагиҳо самаранок бошад, кодро модулӣ, тестшаванда ва ба осонӣ нигоҳдоштанӣ гардонад.

Аз ин рӯ, модулҳо вобастагиҳоро фароҳам меоранд, ва компонентҳо ин вобастагиҳоро бо синфҳое, ки онҳоро истифода мебаранд, пайваст мекунанд.