Sobes.tech
Junior

K čemu se používá Dagger při vývoji na Androidu?

sobes.tech AI

Odpověď od AI

Dagger se používá pro injekci závislostí (Dependency Injection - DI) v Android aplikacích.

Hlavní výhody používání Dagger:

  • Snížení propojení (Decoupling): Odděluje vytváření objektů od jejich použití, což činí kód modulárnější a snáze testovatelný.
  • Zlepšení testovatelnosti: Umožňuje snadno nahradit moxy nebo stuby při testování jednotlivých komponent.
  • Správa životního cyklu objektů: Dagger může spravovat vytváření a znovupoužití objektů (například pomocí anotací @Singleton, @Reusable, @ActivityScoped atd. pro Dagger Android).
  • Explicitnější graf závislostí: Dagger generuje kód, který jasně ukazuje, jak jsou komponenty závislé na sobě.
  • Vyšší výkon při běhu ve srovnání s reflexními DI frameworky: Dagger generuje kód při kompilaci, čímž se vyhýbá nákladům na reflexi.

Klíčové pojmy v Dagger:

  • Moduly (@Module): Poskytují závislosti. Metody označené @Provides ukazují, jak vytvořit instanci závislosti.
  • Komponenty (@Component, @Subcomponent): Spojují moduly a třídy, které žádají závislosti. Komponenty poskytují metody pro získání injektovaných závislostí.
  • @Inject: Používá se k označení konstruktorů, polí nebo metod, do kterých má Dagger injektovat závislosti.
  • Scope (@Scope): Umožňuje řídit životní cyklus objektů vytvořených Daggerem.

Příklad injekce závislosti přes konstruktor:

// Třída, která vyžaduje závislost
public class MyPresenter {

    private final MyRepository repository;

    @Inject // Dagger použije tento konstruktor
    public MyPresenter(MyRepository repository) {
        this.repository = repository;
    }

    // ...
}

// Závislost
public class MyRepository {
    // ...
}

// Modul poskytující MyRepository
@Module
public class AppModule {

    @Provides
    public MyRepository provideMyRepository() {
        return new MyRepository();
    }
}

// Komponent
@Component(modules = AppModule.class)
public interface AppComponent {
    void inject(MyActivity activity); // Metoda pro injekci do Activity
}

Stručně řečeno, Dagger pomáhá vytvářet strukturovanější, testovatelné a udržovatelné Android aplikace.