[C#] Microsoft Unity I – Introducción a la inyección de dependencias

Posted on Actualizado enn


Post de la serie:

Hola, inicio una serie de post sobre la inyección de dependencias, la inyección de dependencias conocida por las siglas DI por su nombre en inglés Dependency Inyection, es un patrón de diseño altamente utilizado en aplicaciones medianas/grandes que requieren un ciclo de vida especial durante todo su proceso de desarrollo y mantenimiento, en este primer post no vamos a ver código (al menos no mucho), ya que quiero hablar del por qué DI es importante y que beneficios obtenemos al utilizarla.

Durante el proceso de desarrollo de software y espero que no sea tu caso (a mi si que me ha pasado) es posible que algunos requerimientos cambien o bien que se añadan nuevos, esto puede ser dado no solo por el cliente, dichos cambios pueden venir de negocio, o de la misma área de tecnología… sin importar el origen del cambio, lo importante es que nuestro sistema este preparado para asumir esos cambios y no se genere un impacto muy fuerte en el proyecto, claro que también depende del tipo del requerimiento, pero en general esa es la idea.

Para que nuestro sistema este preparado para asumir cambios (entre otras cosas) es importante tener una arquitectura extensible y modular que permita ser ágiles en el momento de responder a nuevas necesidades/requerimientos que vayan llegando, y es allí donde la inyección de dependencias juega un papel importante.

La inyección de dependencias ofrece algunos beneficios como:

  • Mantenibilidad: Cuando el sistema comienza a crecer tanto en tamaño como en funcionalidad, se va complicando el modificar/arreglar alguna funcionalidad, ya que cualquier cambio puede afectar múltiples partes del sistema o bien ser necesario realizar el mismo cambio en diferentes partes (si, creo que te has dado que has estado repitiendo código) con lo cual es engorroso realizar estos cambios y el sistema es muy sensible a introducir nuevos bugs; con la inyección de dependencias y un diseño adecuado del sistema las tareas de mantenimiento se vuelven más sencillas y es menos probable que se inyecten nuevos bugs o que haga falta replicar el cambio en alguna parte del código, ya que se tiene claro que componente hace que cosa, y aquí encontramos un principio clave de la DI, trabaja contra abstracciones y no contra implementaciones, y que quiere decir esto? Básicamente que debes trabajar contra interfaces (la abstracción) y no con la clase concreta (la implementación) así tu sistema va a funcionar con cualquier clase que implemente la interfaz que requieres.
  • Testeabilidad: Uno de los puntos en mi opinión más importante del usar DI, es su facilidad para testear componentes del sistema, y esto va muy de la mano con TDD (Test Driven Development), en donde la idea es poder tener un set de pruebas unitarias para probar/validar la funcionalidad de nuestro sistema, así al hacer algún cambio en el desarrollo, es posible identificar tempranamente si se inyecto algún bug en el sistema gracias al todo el conjunto de pruebas unitarias que al menos deberían validar el core y/o partes principales del sistema. Este tema de pruebas y sobre todo de TDD es bastante amplio e interesante, así que te recomiendo le des una buena revisada.
  • Extensibilidad: Siempre va a ser necesario seguir añadiendo funcionalidad a una aplicación, y gracias a la abstración sobre los componentes específicos sería posible por ejemplo cambiar de un caché local a implementar un cache de segundo nivel con AppFabric o un Memcached.
  • Poco acoplamiento: Otro punto bastante interesante, la idea de tener poco acoplamiento entre componentes permita facilmente cambiar la implementación de uno de ellos o reemplazarlo por otro, adicionalmente ayuda en la testeabilidad de los mismos, ya que al ser poco dependientes de otros sistemas/elementos podemos realizar pruebas sobre ellos de una manera relativamente sencilla.
  • Desarrollo en equipo: Cuando el equipo de desarrollo comienza a crecer, es cada vez más importante distribuir requerimientos a cada miembro del equipo de desarrollo, y gracias a que se tienen componentes desacoplados, es sencillo dividir al equipo para que cada miembro se enfoque en una parte específica del sistema, además, si recordamos la idea de trabaja contra abstracciones y no contra implementaciones, cada componente del sistema va a conocer que hace el otro (por medio de un contrato, es decir la interfaz) pero no le interesa como lo haga.

Luego de conocer algunos de los beneficios de implementar inyección de dependencias, es momento de hablar el cómo podemos usarla. Existen tres formas en las cuales podemos inyectar una dependencia:

  • Inyección por método
  • Inyección por constructor
  • Inyección por propiedades

Espero esta pequeña introducción les sea tanto útil como interesante, nos vemos en el siguiente post donde ya vamos a comenzar a hablar y utilizar Microsof Unity.

Y no te olvides compartir el post!

Saludos.

12 comentarios sobre “[C#] Microsoft Unity I – Introducción a la inyección de dependencias

    lenin valencia escribió:
    05/02/2014 en 10:34

    Excelente aporte, para cuando la segunda entrega

    Gustavo Alzate Sandoval (ElTavo) escribió:
    05/02/2014 en 11:10

    Excelente post como siempre, muy buena introducción al tema de ID, estaré siguiendo esta serie, ya que es muy interesante y útil.

    saludos Julio!

    Diana escribió:
    05/02/2014 en 23:10

    Excelente Post Julito esperando la segunda entrega! saludos…

    dxdiag escribió:
    05/05/2014 en 23:57

    Buen post , al igual que muchos estaré al pendiente sobre el tema ,, saludos

    […] Microsoft Unity I – Introducción a la inyección de dependencias […]

    Daniel Seara escribió:
    05/07/2014 en 11:14

    Reblogueó esto en Universidad Nety comentado:
    Sumando buenas publicaciones de colegas. (y ahorrándome el tener que escribir :))

    Jeysson Ramirez escribió:
    05/07/2014 en 15:58

    Como Siempre Julio Muy Buen Post me Sirvió para Instruir un Compañero

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