Sobes.tech
Junior

Para que é que o Dagger é utilizado no desenvolvimento Android?

sobes.tech IA

Resposta da IA

O Dagger é utilizado para a injeção de dependências (Dependency Injection - DI) em aplicações Android.

As principais vantagens do uso do Dagger:

  • Redução do acoplamento: Separa a criação de objetos do seu uso, tornando o código mais modular e fácil de testar.
  • Melhoria na testabilidade: Permite substituir facilmente mocks ou stubs ao testar componentes individuais.
  • Gestão do ciclo de vida dos objetos: O Dagger pode gerir a criação e reutilização de objetos (por exemplo, usando anotações @Singleton, @Reusable, @ActivityScoped, etc. para Dagger Android).
  • Gráfico de dependências mais explícito: O Dagger gera código que mostra claramente como os componentes dependem uns dos outros.
  • Maior desempenho em tempo de execução em comparação com frameworks de DI reflexivos: O Dagger gera código durante a compilação, evitando os custos associados à reflexão.

Conceitos-chave no Dagger:

  • Módulos (@Module): Fornecem dependências. Os métodos anotados com @Provides indicam como criar uma instância de dependência.
  • Componentes (@Component, @Subcomponent): Conectam módulos e classes que solicitam dependências. Os componentes fornecem métodos para obter dependências injetadas.
  • @Inject: Usado para marcar construtores, campos ou métodos nos quais o Dagger deve injetar dependências.
  • Escopos (@Scope): Permitem controlar o ciclo de vida dos objetos criados pelo Dagger.

Exemplo de injeção de dependência através do construtor:

// Classe que requer dependência
public class MyPresenter {

    private final MyRepository repository;

    @Inject // Dagger usará este construtor
    public MyPresenter(MyRepository repository) {
        this.repository = repository;
    }

    // ...
}

// Dependência
public class MyRepository {
    // ...
}

// Módulo que fornece MyRepository
@Module
public class AppModule {

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

// Componente
@Component(modules = AppModule.class)
public interface AppComponent {
    void inject(MyActivity activity); // Método para injetar na Activity
}

Resumindo, o Dagger ajuda a criar aplicações Android mais estruturadas, testáveis e fáceis de manter.