inyección de dependencias: como inyectar código sin morir de sobre dosis…

19
Inyección de dependencias Como inyectar código sin morir de sobre dosis… Luis Alexander Aldazabal Gil http://code2read.com @berczeck

Upload: luis-alexander-aldazabal-gil

Post on 25-Jan-2017

257 views

Category:

Software


0 download

TRANSCRIPT

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

Inyección de dependenciasComo inyectar código sin morir de sobre dosis…

Luis Alexander Aldazabal Gilhttp://code2read.com@berczeck

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

Temario• ¿Qué es la inyección de dependencias?• Beneficios• Tipos de dependencias• Estrategias para inyectar código• Librerías• Demo• Recursos• Preguntas

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

¿Qué es la inyección de dependencias?• No tiene nada

que ver con agujas

• Ni hospitales• Ni personas

enfermas• Tampoco con

una linda enfermera

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

¿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

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

Beneficios1. 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.

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

Tipos de dependenciasNOTA: 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.

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

Tipos de dependencias1. 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)

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

Estratégias• Constructor inyection – Inyección por

constructor • Property inyection – Inyección por

propiedad• Parameter inyection – Inyección por

parámetro

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

EstratégiasConstructor 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.

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

EstratégiasConstructor 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).

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

EstratégiasProperty injection (Inyección por propiedad)Este tipo requiere que se cree una propiedad o un método para asignar una dependencia.

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

EstratégiasProperty 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.

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

EstratégiasParameter 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.

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

EstratégiasParameter 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.

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

Librerías1. Ninject: 2. SimpleInjector: 3. StructureMap: 4. Unity: 5. Windsor: 6. Spring .Net:

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

LibreríasFuente:http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison

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

Demo

Código fuente:https://github.com/Code2Read/SoftwareDesign/tree/master/AplicandoIoC/ServicioAplicacion

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

Preguntas