¿Qué es la Inversión de Control y la Inyección de Dependencias?

En este artículo se explican algunos conceptos sobre el Principio de Inversión de Dependencias (DIP), Inversión de Control (IoC) e Inyección de Dependencias (DI). En la web existen muchos artículos que hablan sobre estos temas, pero a veces tienden a confundir a los desarrolladores por conflictos en la terminología, así que la intención con este artículo es que se pueda entender bien en qué consisten estos temas antes que ver código.

Principio de Inversión de Dependencias:

Conocido como DIP (Dependency Inversion Principle) es un término incluido en la Ingeniería de Software dentro de los principios SOLID, los cuales representan 5 principios de programación y diseño orientado a objetos, y los cuales tienen como intención lograr la creación de un software más eficiente, organizado y fácil de mantener. Hablando más concretamente de DIP, este principio establece que los módulos de alto nivel de un software no deben depender de módulos de bajo nivel, sino que ambos deben depender de abstracciones. De esta forma, se reduce el acoplamiento entre los componentes del software.

Inversión de Control:

En inglés, conocido como Inversion of Control (IoC), es un estilo de programación en el cual un framework o librería controla el flujo de un programa. Esto es un cambio con respecto a paradigmas tradicionales donde el programador especifica todo el flujo del programa. Sin conocerlo, estamos usando IoC indirectamente al desarrollar aplicaciones con el framework .NET de Microsoft, por ejemplo: cuando creamos una aplicación ASP.NET nosotros conocemos cuál es el ciclo de vida de una página, pero no lo controlamos ya que es ASP.NET el que lo hace, o cuando creamos aplicaciones de escritorio o móviles, los formularios también tienen su ciclo de vida que controla el framework.

Inyección de Dependencias:

También llamada DI (Dependency Injection), la inyección de dependencias es un patrón de diseño que permite construir software con poco acoplamiento. Básicamente, el patrón funciona con un objeto que se encarga de construir las dependencias que una clase necesita y se las suministra, de ahí el término “inyección”. Esto implica que la clase ya no crea directamente los objetos que necesita, sino que los recibe de otra clase. Esta es la aplicación del principio DIP que hablábamos antes en este artículo. Imaginemos que tenemos una clase A que necesita usar otra clase B. Si en vez de hacer una dependencia directa de la clase B, creamos una interfaz B, esto significa que podemos cambiar la implementación de la clase B muchas veces sin afectar la clase A ya que no dependerán directamente. La imagen a continuación es un diagrama en notación UML que explica lo anteriormente mencionado.

1

¿Cuáles son las ventajas de usar la Inyección de Dependencias en mis aplicaciones?

A continuación se mencionan las que son, algunas de las ventajas de usar DI en nuestras aplicaciones:

  • Bajo acoplamiento entre los componentes, lo cual es una gran ayuda sobretodo en el mantenimiento de software.
  • La Inyección de Dependencias es un patrón de diseño ampliamente conocido, por ende es fácil de adaptar en múltiples lenguajes de programación, y son soluciones ya probadas a problemas recurrentes en el desarrollo de software.
  • Facilidad para pruebas, ya que al tener componentes más desacoplados estos son más independientes, y como consecuencia se hace más fácil la implementación de prácticas recomendables de usar como TDD (Test Driven Development).
  • El software se hace más fácil su mantenimiento a medida que va creciendo, ya que si se implementa una buena arquitectura con DI, la responsabilidad de cada uno de los componentes será muy clara y un cambio podrá ser más fácil de implementar.
  • Al usar DI se debe pensar un poco más y planear mejor las dependencias de una clase, ya que la idea es utilizar solo las que sean necesarias.
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s