Una introducción rápida a la inyección de dependencias: qué es y cuándo usarla

por Bhavya Karia

Introducción

en ingeniería de software, la inyección de dependencias es una técnica mediante la cual un objeto (o método estático) suministra las dependencias de otro objeto. Una dependencia es un objeto que se puede usar (un servicio).

esa es la definición de Wikipedia, pero aún así, pero no es particularmente fácil de entender. Así que vamos a entenderlo mejor.,

antes de entender lo que significa en programación, veamos primero lo que significa en general, ya que nos ayudará a entender mejor el concepto.

dependencia o dependiente significa confiar en algo para el apoyo. Por ejemplo, si digo que dependemos demasiado de los teléfonos móviles de lo que significa que dependemos de ellos.

así que antes de llegar a las inyecciones de dependencia, primero vamos a entender lo que significa una dependencia en la programación.

Cuando la clase a USA alguna funcionalidad de la Clase B, entonces se dice que la clase A tiene una dependencia de la clase B.,

mostrando dependencias entre clases

en Java, antes de poder usar métodos de otras clases, primero necesitamos crear el objeto de esa clase (es decir, la clase A necesita crear una instancia de Clase B).

entonces, transferir la tarea de crear el objeto a otra persona y usar directamente la dependencia se llama inyección de dependencias.

¿y si el código pudiera hablar?

¿por qué debo usar la inyección de dependencia?,

digamos que tenemos una clase de automóvil que contiene varios objetos como ruedas, motor, etc.

Aquí la clase car es responsable de crear todos los objetos de dependencia. Ahora, ¿qué pasa si decidimos deshacernos de MRFWheels en el futuro y queremos usar Yokohama Wheels?

tendremos que recrear el objeto car con una nueva dependencia de Yokohama. Pero cuando se usa dependency injection (DI), podemos cambiar las ruedas en tiempo de ejecución (porque las dependencias se pueden inyectar en tiempo de ejecución en lugar de en tiempo de compilación).,

Puede pensar en DI como el intermediario en nuestro código que hace todo el trabajo de crear el objeto Preferred wheels y proporcionarlo a la clase de automóvil.

hace que nuestra clase de automóvil sea independiente de la creación de los objetos de ruedas, baterías, etc.

hay básicamente tres tipos de inyección de dependencias:

  1. inyección del constructor: las dependencias se proporcionan a través de un constructor de clase.
  2. inyección setter: el cliente expone un método setter que el inyector utiliza para inyectar la dependencia.,
  3. inyección de interfaz: la dependencia proporciona un método de inyector que inyectará la dependencia en cualquier cliente que se le pase. Los clientes deben implementar una interfaz que exponga un método setter que acepte la dependencia.

así que ahora es responsabilidad de la inyección de dependencias:

  1. Crear los objetos
  2. Saber qué clases requieren esos objetos
  3. y proporcionarles todos esos objetos

si hay algún cambio en los objetos, entonces DI lo mira y no debe referirse a la clase que usa esos objetos., De esta manera, si los objetos cambian en el futuro, entonces su DI es responsable de proporcionar los objetos apropiados a la clase.

inversión de control —el concepto detrás de DI

esto establece que una clase no debe configurar sus dependencias estáticamente, sino que debe ser configurada por alguna otra clase desde fuera.

es el quinto principio de S. O. L. I. D — los cinco principios básicos de la programación orientada a objetos y el diseño de Uncle Bob-que establece que una clase debe depender de la abstracción y no de las concreciones (en términos simples, codificados).,

de acuerdo con los principios, una clase debe concentrarse en cumplir con sus responsabilidades y no en Crear objetos que requiere para cumplir con esas responsabilidades. Y ahí es donde la inyección de dependencias entra en juego: proporciona a la clase los objetos requeridos.

Nota: Si quieres aprender sobre SOLID principles por Uncle Bob, puedes dirigirte a este enlace.

beneficios del uso de DI

  1. Ayuda en las pruebas unitarias.
  2. El código de la placa de caldera se reduce, ya que la inicialización de las dependencias se realiza por el componente del inyector.,
  3. extender la aplicación se hace más fácil.
  4. ayuda a habilitar el acoplamiento suelto, que es importante en la programación de aplicaciones.

desventajas de DI

  1. Es un poco complejo de aprender, y si se utiliza en exceso puede conducir a problemas de gestión y otros problemas.
  2. Muchos errores de tiempo de compilación se envían al tiempo de ejecución.
  3. Los marcos de inyección de dependencias se implementan con reflexión o programación dinámica. Esto puede dificultar el uso de la automatización IDE, como «buscar referencias», «mostrar jerarquía de llamadas» y refactorización segura.,

Puede implementar la inyección de dependencias por su cuenta (pura vainilla) o utilizar bibliotecas o marcos de terceros.

bibliotecas y Frameworks que implementan DI

  • Spring (Java)
  • Google Guice (Java)
  • Dagger (Java y Android)
  • Castle Windsor (. NET)
  • Unity (.,NET)

para obtener más información sobre la inyección de dependencias, puede consultar los siguientes recursos:

Java Dependency Injection-DI Design Pattern Example Tutorial-JournalDev

Using dependency injection in Java-Introduction-Tutorial-Vogella

Inversion of Control Containers and the Dependency Injection pattern — Martin Fowler

Hope it helps!

si te gustó el artículo y quieres leer más artículos increíbles, entonces Sígueme aquí (Bhavya Karia) y muestra tu apoyo, ya que me motiva a escribir más.,

Si tienes alguna pregunta o comentario para mí, conectémonos en LinkedIn, Twitter, Facebook.

Edit 1:

Gracias a Sergey Ufocoder ahora este artículo se ha convertido al idioma ruso. Mis amigos rusos y todos los que saben leer el idioma ruso lo leen.

enlace al artículo

Además, si desea aplicar DI en JavaScript y está buscando una biblioteca, Jo Surikat sugiere que pruebe su biblioteca.

Di-Ninja

Nicolas Froidure sugirió una biblioteca di más impresionante en JavaScript.,

knifecycle

Edit 2:

Si usted es un desarrollador PHP entonces no se preocupe, tiene todo cubierto también. Gordon Forsythe recomendó esta increíble biblioteca que todos querrían probar.

auryn

Gracias por todas las palabras que he estado recibiendo. Comparta el artículo para que más y más personas puedan beneficiarse.

Share

Deja una respuesta

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