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 - это инъекция зависимостей.

Краткое описание, которое делает кинжал уникальным:

Выгоды:

  1. Если мы используем кинжал в очень маленьких проектах / задачах, подобных заданным вами, то кинжал не заслуживает этого. Он был бы более эффективным, если его использовать в промежуточных, длинных приложениях. Потому что это помогает нам избежать создания нежелательных объектов в коде.

  2. Мы можем использовать кинжал для повторного использования объекта через граф объектов.

  3. Мы можем распределить зависимость как для
    • Уровень проекта
    • Уровень приложения
    • Уровень модуля (как: Домой, Учетная запись в приложении)
  4. Мы можем определить пользовательскую область, также есть некоторые уже определенные области, такие как Singleton, есть хорошие понятия в кинжале, такие как зависимость компонента и подкомпонент.

  5. Может вводить класс, объект, конструктор.

Другие вопросы по тегам