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

Hola a todos. En este artículo quiero explicarles 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 podamos 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 mantenible. 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:

Tambien llamada DI (Dependency Injection), la inyección de dependencias es un patrón de diseño que nos 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 hablabamos 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 una diagrama en notación UML que explica lo anteriormente mencionado.

DI_01

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

A continuación les mencionaré las que son, en mi opinión personal, algunas de las ventajas de usar DI en nuestras aplicaciones:

  • Como lo mencioné anteriormente, una de las grandes ventajas es el bajo acoplamiento entre los componentes, lo cual es una gran ayuda sobretodo en la mantenibilidad del 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 mantenible 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 mas fácil de implementar.
    Al usar DI debemos pensar un poco más y planear mejor las dependencias de una clase, ya que la idea es utilizar solo las que sean necesarias.

Y finalmente: ¿cómo podemos usar la Inyección de Dependencias en mis proyectos ASP.NET?… Bien, en próximos artículos veremos más particularmente ya como implementar DI en una aplicación web construida con el framework .NET.

¿Tienes algún aporte o comentario con respecto a los conceptos de este artículo? ¡No dudes en compartirlo!

Anuncios

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

  1. Pingback: ¿Qué es un Contenedor de Inversión de Control o Contenedor de Inyección de Dependencias? | hgr.net

  2. Pingback: Inyección de dependencias en ASP.NET MVC usando Unity | hgr.net

  3. Pingback: ¿Qué es la Inversión de Control y la Inyección de Dependencias? – Avanet

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

A %d blogueros les gusta esto: