Dagger Dagger Antes Después – Dagger2 con Java Autor de ejemplo: Laurence Liu | Octubre de 2020

Conocí la primera reacción de Dagger hace unos años.

La curva de aprendizaje para Dependency Injection con Dagger es demasiado empinada para aquellos que no tienen experiencia con Dependency Injection. Así que dediqué un tiempo a comprender qué es DI y me di cuenta de que lo había usado en todas partes en mi proyecto. Excepto que no sabía que se llamaba DI.

Después de comprobar algunos ejemplos y ejecutar elmiEstoy en mi IDE. Encontré el mejor para practicar es Ejemplo de una aplicación CoffeeApp de Google. Esta tambien diapositiva y guía de desarrollo hablar de anotaciones. Así que presentaré brevemente cada anotación y, antes de conocer a Dagger, reproduciré el código de CoffeShop. Espero que esto pueda facilitar la comprensión.

Nota: El ejemplo de Google ya siguió la política de inversión de dependencias. Aquí está la página wiki para SÓLIDO y Principio de inversión de dependencia.

Imagen de esta imagen https://tinyurl.com/y22qbw4r.

Como se muestra arriba y código fuente.
La máquina de café depende del calentador eléctrico y del termosifón.
El termosifón depende del calentador eléctrico.
Todos los dispositivos CoffeMaker, Thermosiphon y ElectricHeater dependen de CoffeeLogger.

Es una buena idea comenzar con CoffeeLogger. Es importante para todos.

Aquí hay dos notas para prestar atención a este bloque.

  • @Inyectar – Deja que Dagger sepa cómo crear una instancia de este objeto. Hay dos pasos para @Inyectar. La primera es la anotación de la nueva instancia de destino. El segundo es la anotación del constructor, que depende del objetivo.
    En este caso, el código creó una nueva instancia de CoffeeLogger ().
  • @Un hijo único – Tipo @Rango. Proporciona dependencias como un singleton si se usa el mismo componente. Más información de su documentación. (Más artículos relacionados sobre @Scope y @Singleton se enumeran en la sección TL; DR)

Como lo mencionó el gremio de desarrolladores. @Inyectar no funciona en todas partes:

  1. No se puede construir la interfaz.
  2. Las clases de terceros no se pueden comentar.
  3. ¡Los objetos configurables deben estar configurados!

Y es por eso que otras anotaciones @ Módulo, @ Proveedores, y @Enlaza ven a ayudar.

  • @Inyectar – Como se mencionó en el bloque anterior. los @Inyectar aquí hay una anotación del constructor que depende del objetivo.
  • @Módulo – En resumen, indique la dependencia. El código generado siguió Patrón de fábrica. Los métodos dentro del código generado proporcionan una instancia de la clase de destino.
  • @Enlaza – Lo mismo que @Proporciona. En resumen, la mayor diferencia entre los dos métodos está en @Enlaza no tiene que implementarlo. Esto hace que la interfaz y la clase abstracta estén disponibles para @Enlaza. (Más detalles en la sección TL; DR)

Estas son básicamente las mismas cosas que ElectricHeater.

Si usted sabe @Inyectar anotación, el código se vuelve más legible y comprensible después de que se importa la daga. La razón por la que escribí el método getCoffeeLogger en el código antes de importar la daga es que la clase CoffeeShop lo necesitará.

  • @Modul – Esta anotación como agente o puente entre ellos @Inyectar y @Módulo. Estarán generar una implementación de este acuerdo. También conocido como edificio DAG (reerigido Ycíclico GRAMOraph).

Como muestra el código, DaggerCoffeeApp_CoffeeShop es código generado por Dagger. Siguió Patrón de constructor. En este caso, CoffeeShop puede obtener CoffeeMaker y CoffeeLogger sin un montón de código redundante.

La imagen de arriba muestra las soluciones y problemas con la importación de Dagger2. Dagger2 es como Retrofit. Las reglas están compuestas por Square y Google, y los desarrolladores las siguen. El código se vuelve más limpio y legible. Todos estan contentos.

En la siguiente sección, daré algunos ejemplos de un proyecto de Android con Dagger2 para ver cómo mueve la vida de un desarrollador.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *