Patrón de diseño de la OOP, fue acuñado por Martin Fowler.
Sigue el principio Hollywood: No nos llames, nosotros te llamaremos. Permite desarrollar código desacoplado.
Inyección de Dependencias: Como inyectar código sin morir de sobre dosis…
1. Inyección de dependencias
Como inyectar código sin morir de sobre dosis…
Luis Alexander Aldazabal Gil
http://code2read.com
@berczeck
2. Temario
• ¿Qué es la inyección de dependencias?
• Beneficios
• Tipos de dependencias
• Estrategias para inyectar código
• Librerías
• Demo
• Recursos
• Preguntas
3. ¿Qué es la inyección de dependencias?
• No tiene nada que
ver con agujas
• Ni hospitales
• Ni personas
enfermas
• Tampoco con una
linda enfermera
4. ¿Qué es la inyección de dependencias?
• Patrón de diseño de la OOP
• Fue acuñado por Martin Fowler
• Sigue el principio Hollywood:
No nos llames, nosotros te
llamaremos
• Permite desarrollar código
desacoplado
• Permite pasar las referencias
necesarias a una clase sin
necesidad que el las cree
5. Beneficios
1. Late Binding (Enlace tardío) :
• Permite escoger que componentes se van a usar en tiempo de ejecución en lugar del tiempo
de compilación sin modificar el código.
2. Extensibility (Extensibilidad) :
• Permite extender y rehusar el código para agregar nuevas funcionalidades.
3. Parallel Development (Desarrollo paralelo) :
• Permite que muchas personas trabajen sobre el mismo proyecto en paralelo.
4. Maintainability (Mantenimiento) :
• Permite tener clases con responsabilidades claras.
5. Testeability (Testeabilidad) :
• Permite tener clases que se pueden probar unitariamente.
6. Tipos de dependencias
NOTA:
Se recomienda usar la inyección de dependencias para las dependencias volátiles.
Las dependencias volátiles son las que tienden a cambiar o aún no están definidas, todo lo
demás son dependencias estables.
7. Tipos de dependencias
1. Dependencias estables:
• Tipos del framework
• Clases o módulos que ya existen
• Algo con muy poca probabilidad de cambio
• Tipos con algoritmos deterministas, que siempre devuelven la misma información.
2. Dependencias volátiles:
• Temas de infraestructura (Base de datos, servicios web, sistema de archivos, etc).
• Dependencias que aún no existen, clases que aun falten desarrollar.
• Dependencias que no están instaladas en todas las máquinas de desarrollo,
componentes de terceros.
• Tipos con algoritmos no deterministas (Por ejemplo: System.Random,
System.DateTime, etc)
8. Estratégias
• Constructor inyection – Inyección por constructor
• Property inyection – Inyección por propiedad
• Parameter inyection – Inyección por parámetro
9. Estratégias
Constructor injection (Inyección por constructor)
Permite escoger que componentes se van a usar en tiempo de ejecución en lugar
del tiempo de compilación sin modificar el código.
10. Estratégias
Constructor injection (Inyección por constructor)
• Pros
• Las clases auto documentan lo que necesitan para hacer su trabajo.
• Se puede usar con o sin un contenedor de inversión de control.
• Una vez creadas las clases estas se encuentran en un estado valido.
• Contras
• El constructor puede tener muchos parámetros (Code Smell).
• No trabaja bien con la Serialización se debe definir un constructor sin parámetros.
• No todos los métodos requieren los objetos que otros métodos requieren (Baja cohesión).
12. Estratégias
Property injection (Inyección por propiedad)
• Pros
• Muy flexible.
• La dependencia puede cambiar en cualquier momento.
• Contras
• Menos intuitivos.
• Los objetos pueden encontrarse en un estado inválido desde la construcción hasta la
asignación de la dependencia.
14. Estratégias
Parameter injection (Inyección por parámetro)
• Pros
• Más granular.
• Más flexible.
• No requiere cambiar el resto de la clase.
• Contras
• El método puede tener muchos parámetros (Code Smell).
• Cambia la firma de un método.