Sobes.tech
Middle+

Dagger 1 менен Dagger 2нын айырмасы эмнеде?

sobes.tech AI

AIден жооп

Негизги айырма — Dagger 2 кодту түзүү учурунда түзүлөт, ал Dagger 1 иштөө учурунда рефлексияга таяна турган.

Dagger 2нин Dagger 1ге салыштырмалуу артыкчылыктары:

  • Өндүрүмдүүлүк: Рефлексиянын жоктугу иштөө убактысын кыскартат.
  • Ката аныктоо: Конфигурация катачылыктары түзүү учурунда көрүнөт, иштөө учурунда эмес.
  • Ишенимдүүлүк: Жасалган код көбүрөөк алдын ала белгилүү жана тестирлөө оңой.
  • Жашырын ката жок: Рефлексия кээде белгилүү шарттарда гана көрүнгөн катачылыктарды жашырышы мүмкүн.

Dagger 1де @Module жана @Inject аннотациялары, ошондой эле @ObjectGraph класстары колдонулуп, көзкарандылыктарды башкарган.

Dagger 2де дагы @Module жана @Inject колдонулат, бирок негизги механизм — бул @Component, ал инжекттелүүчү объекттер үчүн фабрика болуп кызмат кылат жана Dagger тарабынан түзүлөт.

Dagger 1деги модуль мисалы:

// Dagger 1 Модуль
@Module(injects = MyActivity.class)
public class MyModule {

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

Dagger 2деги модуль мисалы:

// Dagger 2 Модуль
@Module
public class MyModule {

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

Dagger 2деги компонент мисалы:

// Dagger 2 Компонент
@Component(modules = MyModule.class)
public interface MyComponent {

    void inject(MyActivity activity);
}

Негизги принцип — көзкарандылыктар графин модулдар жана аннотациялар аркылуу сүрөттөйсүз, жана Dagger бул графти ишке ашыруу үчүн класстарды түзөт, бул көзкарандылыктарды алууга мүмкүндүк берет. Бул кол менен жазылган фабрикаларга окшош, бирок автоматтык жана эффективдүү.