რა განსხვავებაა Dagger 1 და Dagger 2-ს შორის?
sobes.tech AI
პასუხი AI-სგან
ძირითადი განსხვავება ის არის, რომ Dagger 2 კოდი გენერირდება კომპილაციის დროს, ხოლო Dagger 1 მინდოდა რეფლექსია (reflection) მუშაობის დროს.
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 2-ის: თქვენ აღწერთ დამოკიდებულების გრაფს მოდულებისა და ანოტაციების გამოყენებით, ხოლო Dagger ქმნის კლასებს, რომლებიც ამ გრაფს ახორციელებს, რაც საშუალებას გაძლევთ მიიღოთ დამოკიდებულებების მაგალითები. ეს ჰგავს ხელით დაწერილ ფაბრიკებს, მაგრამ ავტომატურად და ეფექტურად.