Sobes.tech
Middle+

Dagger 1 va Dagger 2 o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Asosiy farq shundaki, Dagger 2 kodni kompilatsiya bosqichida generatsiya qiladi, Dagger 1 esa runtimeda refleksiya (reflection) ga tayanadi.

Dagger 2 ning Dagger 1 ga nisbatan afzalliklari:

  • Ishlash tezligi: Reflection bo'lmagani uchun runtime tezroq bo'ladi.
  • Xatolarni aniqlash: Konfiguratsiya xatolari kompilatsiya bosqichida ko'rinadi, runtimeda emas.
  • Ishonchlilik: Generatsiya qilingan kod oldindan ko'rinadigan va test qilish oson.
  • Yashirin xatolar yo'qligi: Reflection ba'zan faqat muayyan sharoitlarda yuzaga keladigan xatolarni yashirishi mumkin.

Dagger 1 da @Module va @Inject annotatsiyalari, shuningdek, @ObjectGraph sinflari yordamida bog'liqliklar boshqarilgan.

Dagger 2 da ham @Module va @Inject ishlatiladi, lekin asosiy mexanizm @Component, u injektsiya qilinadigan obyektlar uchun fabrika vazifasini bajaradi va Dagger tomonidan ishlab chiqariladi.

Dagger 1 da modul misoli:

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

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

Dagger 2 da modul misoli:

// Dagger 2 Modul
@Module
public class MyModule {

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

Dagger 2 da komponent misoli:

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

    void inject(MyActivity activity);
}

Dagger 2 ning asosiy prinsipi: modullar va annotatsiyalar yordamida bog'liqlik grafigini tavsiflaysiz, Dagger bu grafiga mos keladigan sinflarni ishlab chiqaradi va bu orqali bog'liqlik nusxalarini olishingiz mumkin. Bu, qo'lda yozilgan fabrikalar kabi, lekin avtomatik va samarali tarzda amalga oshiriladi.