Фарқи байни Dagger 1 ва Dagger 2 дар чист?
sobes.tech AI
Ҷавоб аз AI
Асосӣ фарқ дар он аст, ки Dagger 2 кодро дар марҳилаи компилятсия мебарорад, дар ҳоле ки Dagger 1 ба рефлексия дар вақти иҷрои такя мекард.
Бартариҳои Dagger 2 нисбат ба Dagger 1:
- Камшавии рефлексия: Ин ба иҷрои зудтар мусоидат мекунад.
- Таҳлил: Хатогиҳои конфигуратсия дар марҳилаи компилятсия намоён мешаванд, на дар вақти иҷро.
- Меъёри эътимоднокӣ: Коде, ки Dagger мебарорад, пешгӯишаванда ва осонтар тест мешавад.
- Бе хатоҳои пинҳон: Рефлексия метавонад хатоҳоро пинҳон кунад, ки танҳо дар шароити муайян пайдо мешаванд.
Дар 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 2: шумо графи вобастагиро бо истифода аз модулҳо ва аннотацияҳо тавсиф мекунед, ва Dagger синфҳоро мебарорад, ки ин графро иҷро мекунанд, ва имкон медиҳанд, ки намунаҳои вобастагиро ба даст оред. Ин монанди навиштани фабрикҳо бо даст, аммо автоматӣ ва самаранок.