Sobes.tech
Middle+

Kāda ir atšķirība starp Dagger 1 un Dagger 2?

sobes.tech AI

Atbilde no AI

Galvenā atšķirība ir tā, ka Dagger 2 ģenerē kodu kompilācijas laikā, bet Dagger 1 balstījās uz refleksiju darbības laikā.

Dagger 2 priekšrocības salīdzinājumā ar Dagger 1:

  • Veiktspēja: Refleksijas neesamība padara darbību ātrāku.
  • Atkļūdošana: Konfigurācijas kļūdas ir redzamas kompilācijas laikā, nevis darbības laikā.
  • Uzticamība: Ģenerētais kods ir labāk prognozējams un testējams.
  • Slēptu kļūdu neesamība: Refleksija var slēpt kļūdas, kas izpaužas tikai noteiktos apstākļos.

Dagger 1 izmantoja @Module un @Inject anotācijas, kā arī @ObjectGraph klases atkarību pārvaldībai.

Dagger 2 arī izmanto @Module un @Inject, bet galvenais mehānisms ir @Component, kas ir fabrika injicējamiem objektiem un tiek ģenerēts ar Dagger.

Piemērs Dagger 1 modulim:

// Dagger 1 Modulis
@Module(injects = MyActivity.class)
public class MyModule {

    @Provides
    public MyDependency provideMyDependency() {
        return new MyDependency();
    }
}

Piemērs Dagger 2 modulim:

// Dagger 2 Modulis
@Module
public class MyModule {

    @Provides
    public MyDependency provideMyDependency() {
        return new MyDependency();
    }
}

Piemērs Dagger 2 komponentam:

// Dagger 2 Komponents
@Component(modules = MyModule.class)
public interface MyComponent {

    void inject(MyActivity activity);
}

Galvenais Dagger 2 princips: jūs aprakstāt atkarību grafiku ar moduļiem un anotācijām, un Dagger ģenerē klases, kas realizē šo grafiku, nodrošinot iespēju iegūt atkarību eksemplārus. Tas atgādina manuāli rakstītu fabriku, bet automātiski un efektīvi.