Sobes.tech
Junior

¿Para qué se utiliza Dagger en el desarrollo de Android?

sobes.tech AI

Respuesta de la IA

Dagger se utiliza para la inyección de dependencias (Dependency Injection - DI) en aplicaciones Android.

Las principales ventajas del uso de Dagger:

  • Reducción del acoplamiento: Separa la creación de objetos de su uso, haciendo que el código sea más modular y fácil de probar.
  • Mejora de la testabilidad: Permite sustituir fácilmente mocks o stubs al probar componentes individuales.
  • Gestión del ciclo de vida de los objetos: Dagger puede gestionar la creación y reutilización de objetos (por ejemplo, mediante anotaciones @Singleton, @Reusable, @ActivityScoped, etc. para Dagger Android).
  • Gráfico de dependencias más explícito: Dagger genera código que muestra claramente cómo los componentes dependen unos de otros.
  • Mayor rendimiento en tiempo de ejecución en comparación con frameworks de DI reflexivos: Dagger genera código en tiempo de compilación, evitando los costes asociados a la reflexión.

Conceptos clave en Dagger:

  • Módulos (@Module): Proporcionan dependencias. Los métodos anotados con @Provides indican cómo crear una instancia de dependencia.
  • Componentes (@Component, @Subcomponent): Conectan módulos y clases que solicitan dependencias. Los componentes proporcionan métodos para obtener dependencias inyectadas.
  • @Inject: Se usa para marcar constructores, campos o métodos en los que Dagger debe inyectar dependencias.
  • Ámbitos (@Scope): Permiten controlar el ciclo de vida de los objetos creados por Dagger.

Ejemplo de inyección de dependencia a través del constructor:

// Clase que requiere dependencia
public class MyPresenter {

    private final MyRepository repository;

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

    // ...
}

// Dependencia
public class MyRepository {
    // ...
}

// Módulo que proporciona 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 inyectar en la Activity
}

En resumen, Dagger ayuda a crear aplicaciones Android más estructuradas, fáciles de probar y mantener.