Dagger2 vs Класс приложений в Android
На этом простом примере
public class MyApp extends Application {
private static MyApp app;
private ImageDownloaderComponent imageDownloaderComponent; // dagger2
ImageDownloader imageDownloader;
@Override
public void onCreate() {
super.onCreate();
app = this;
imageDownloaderComponent = DaggerImageDownloaderComponent.builder().imageDownloaderModule(new ImageDownloaderModule(this)).build();
imageDownloader=new ImageDownloader(this);
}
public static MyApp app(){
return app;
}
public ImageDownloaderComponent getImageDownloaderComponent(){
return this.imageDownloaderComponent;
}
}
используя Dagger2
public class MainActivity extends AppCompatActivity {
@Inject ImageDownloader downloader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyApp.app().getImageDownloaderComponent().inject(this);
ImageView imageView = findViewById(R.id.main_image);
downloader.toImageView(imageView, "https://..../fruits.png");
} }
без кинжала2
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ImageView imageView = findViewById(R.id.main_image);
MyApp.app().imageDownloader.toImageView(imageView, "https://---/fruits.png");
}
}
Оба дела активность работает нормально. мой вопрос, зачем нам dagger2 даже та же задача, которую выполняет класс приложения? Насколько это эффективно? я Google, я получил его легко для тестирования, кроме каких-либо преимуществ там?? какая деятельность хороша в приведенных выше примерах? Зачем?
1 ответ
Как мы знаем, Dagger - это инъекция зависимостей.
Краткое описание, которое делает кинжал уникальным:
Выгоды:
Если мы используем кинжал в очень маленьких проектах / задачах, подобных заданным вами, то кинжал не заслуживает этого. Он был бы более эффективным, если его использовать в промежуточных, длинных приложениях. Потому что это помогает нам избежать создания нежелательных объектов в коде.
Мы можем использовать кинжал для повторного использования объекта через граф объектов.
- Мы можем распределить зависимость как для
- Уровень проекта
- Уровень приложения
- Уровень модуля (как: Домой, Учетная запись в приложении)
Мы можем определить пользовательскую область, также есть некоторые уже определенные области, такие как Singleton, есть хорошие понятия в кинжале, такие как зависимость компонента и подкомпонент.
Может вводить класс, объект, конструктор.