Middle
дар бораи чорчӯбаи Dagger гап занед.
sobes.tech AI
Ҷавоб аз AI
Даггер — ин рамка барои ворид кардани вобастагиҳо (dependency injection, DI) дар Java ва Android. Он асос ёфтааст ба спецификацияи JSR-330. Dagger V2 истифода мебарад аз тавлиди код дар марҳилаи компилятсия, ки хароҷоти дар вақти иҷроиро, ки одатан барои рамзҳои DI рефлексивӣ аст, бартараф мекунад.
Масоили калидии Dagger:
- Модулҳо (
@Module): Синфҳо, ки вобастагиҳоро таъмин мекунанд. Дар дохили онҳо, методҳое, ки бо@Providesнишон дода шудаанд, намунаҳои объектҳоро бармегардонанд, ки Dagger метавонад ворид кунад.
@Module
public class AppModule {
@Provides
Context provideAppContext(Application app) {
return app.getApplicationContext();
}
}
- Компонентҳо (
@Component): Интерфейсҳо, ки модулҳоро ва ҷойҳои воридкунии вобастагиҳоро пайваст мекунанд. Онҳо методҳоро доранд, ки намунаҳои вобастагиҳоро бармегардонанд ё методҳои воридкунӣ (void inject(Target target);).
@Component(modules = AppModule.class)
public interface AppComponent {
Context getAppContext();
void inject(MyApplication application); // Метод воридкунӣ
}
- Воридкунӣ (
@Inject): Анотация, ки нишон медиҳад, ки Dagger бояд дар куҷо вобастагиро таъмин кунад. Мебошад ба конструкторҳо, майдонҳо ва методҳо истифода шавад.
public class UserManager {
private final UserRepository userRepository;
@Inject // Воридкунӣ тавассути конструктор
public UserManager(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
public class MainActivity extends AppCompatActivity {
@Inject // Воридкунӣ тавассути майдон
UserManager userManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
// Гирифтани компонент ва ворид кардани вобастагиҳо
((MyApplication) getApplication()).getAppComponent().inject(this);
}
}
- Диапазон (
@Singleton,@Scope): Анотацияҳо, ки вақти зиндагии вобастагиҳоро муайян мекунанд.@Singletonҳамчун пешфарз аст, аммо метавон анотацияҳои диапазони худро сохт.
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface PerActivity {}
@PerActivity
@Component(modules = ActivityModule.class, dependencies = AppComponent.class)
public interface ActivityComponent {
void inject(MainActivity activity);
}
Афзалиятҳои Dagger:
- Кам кардани хароҷот: Тавлиди коди дар марҳилаи компилятсия минимизатсия мекунад хароҷоти дар вақти иҷро.
- Бехатарии навъҳо: Хатогиҳо дар графи вобастагиҳо дар марҳилаи компилятсия ошкор мешаванд.
- Таҳлилшавандагӣ: Коди тавлидшудаи Dagger хонданӣ аст.
- Осон кардани тест: Вобастагиҳоро ба осонӣ бо мокҳо иваз кардан мумкин аст.
Норасоиҳо:
- Курсии баланд дар омӯзиш.
- Синтаксиси мураккаб дар баъзе ҳолатҳо.
- Вақти зиёдтар барои компилятсия.
Dagger дар барномаҳои Androidи калон барои идоракунии вобастагиҳо ва сохтори коди истифода мешавад.