SlideShare una empresa de Scribd logo
1 de 19
Inyección de dependencias
Como inyectar código sin morir de sobre dosis…
Luis Alexander Aldazabal Gil
http://code2read.com
@berczeck
Temario
• ¿Qué es la inyección de dependencias?
• Beneficios
• Tipos de dependencias
• Estrategias para inyectar código
• Librerías
• Demo
• Recursos
• Preguntas
¿Qué es la inyección de dependencias?
• No tiene nada que
ver con agujas
• Ni hospitales
• Ni personas
enfermas
• Tampoco con una
linda enfermera
¿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
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.
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.
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)
Estratégias
• Constructor inyection – Inyección por constructor
• Property inyection – Inyección por propiedad
• Parameter inyection – Inyección por parámetro
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.
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).
Estratégias
Property injection (Inyección por propiedad)
Este tipo requiere que se cree una
propiedad o un método para asignar
una dependencia.
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.
Estratégias
Parameter injection (Inyección por parámetro)
Este tipo requiere que se agregue un parámetro en la firma de un método por cada
dependencia que se necesite.
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.
Librerías
1. Ninject:
2. SimpleInjector:
3. StructureMap:
4. Unity:
5. Windsor:
6. Spring .Net:
Librerías
Fuente:
http://www.palmmedia.de/blog/2011/8/
30/ioc-container-benchmark-
performance-comparison
Demo
Código fuente:
https://github.com/Code2Read/SoftwareDesign/tree/master/AplicandoIoC/ServicioAplicacion
Recursos
https://www.manning.com/books/dependency-injection-in-dot-net
https://app.pluralsight.com/library/courses/principles-oo-design
http://martinfowler.com/articles/injection.html
https://en.wikipedia.org/wiki/Dependency_injection
http://code2read.com/2015/03/07/csharp-dependency-injection-estrategias-
inyectar-dependencias-di/
Preguntas

Más contenido relacionado

Similar a Inyección de Dependencias: Como inyectar código sin morir de sobre dosis…

Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDTEdwin Cruz
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en phpIsmael Ambrosi
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando softwareGabriel Moral
 
Prototipos:Un juguete muy valioso
Prototipos:Un juguete muy valiosoPrototipos:Un juguete muy valioso
Prototipos:Un juguete muy valiosoSoftware Guru
 
¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?Micael Gallego
 
Modelos para el desarrollo de software V3
Modelos para el desarrollo de software V3Modelos para el desarrollo de software V3
Modelos para el desarrollo de software V3Marco Guerrero
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de softwaremat3matik
 
Ingeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryyIngeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryynelly
 
Ingeniería de software16
Ingeniería de software16Ingeniería de software16
Ingeniería de software16Ramon
 
Ingenier%c3%ada de software
Ingenier%c3%ada de softwareIngenier%c3%ada de software
Ingenier%c3%ada de softwareMarilupe
 
Ingen de software
Ingen de softwareIngen de software
Ingen de softwareerikapoh
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de softwaresamantha
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software142918
 

Similar a Inyección de Dependencias: Como inyectar código sin morir de sobre dosis… (20)

Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDT
 
Practicas tecnicas
Practicas tecnicasPracticas tecnicas
Practicas tecnicas
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en php
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
mapa conceptual prototipos.docx
mapa conceptual prototipos.docxmapa conceptual prototipos.docx
mapa conceptual prototipos.docx
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Unit testing consejos
Unit testing   consejosUnit testing   consejos
Unit testing consejos
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando software
 
Taller de TDD con .NET y xUnit
Taller de TDD con .NET y xUnitTaller de TDD con .NET y xUnit
Taller de TDD con .NET y xUnit
 
Prototipos:Un juguete muy valioso
Prototipos:Un juguete muy valiosoPrototipos:Un juguete muy valioso
Prototipos:Un juguete muy valioso
 
¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?
 
Modelos para el desarrollo de software V3
Modelos para el desarrollo de software V3Modelos para el desarrollo de software V3
Modelos para el desarrollo de software V3
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software
 
Ingeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryyIngeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryy
 
Ingeniería de software16
Ingeniería de software16Ingeniería de software16
Ingeniería de software16
 
Ingenier%c3%ada de software
Ingenier%c3%ada de softwareIngenier%c3%ada de software
Ingenier%c3%ada de software
 
Ingen de software
Ingen de softwareIngen de software
Ingen de software
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software
 
Clase 11
Clase 11Clase 11
Clase 11
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software
 

Inyección de Dependencias: Como inyectar código sin morir de sobre dosis…