Dagger2 vs Приложение класса в Android - PullRequest
0 голосов
/ 07 сентября 2018

По этому простому примеру

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 Ответ

0 голосов
/ 10 сентября 2018

Как мы знаем, Dagger - это инъекция зависимостей.

Бриф, который делает кинжал уникальным:

Преимущества:

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

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

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

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

...