inyección de dependencia

37
Inyección de Dependencia [email protected] @aparedes82 http://elblogdelfrasco.blogspot.com

Upload: adrian-paredes

Post on 07-Jul-2015

1.965 views

Category:

Technology


1 download

DESCRIPTION

En el desarrollo de grandes aplicaciones empresariales, la dependencia entre módulos es uno de los más grandes problemas. Módulos fuertemente acoplados aceleran la entropía de un sistema, provocando rigidez, fragilidad, inmovilidad y dificultando el mantenimiento y escalamiento del código fuente. La inyección de dependencia es un patrón de diseño que sirve para reducir el acoplamiento entre dos o más módulos y facilitar la administración de dependencias. En esta charla se verán los conceptos fundamentales de Contenedores, Inversión de Control e Inyección de Dependencia, mostrando diferentes implementaciones, entre ellas Spring y Java EE, concluyendo en una comparación entre ambas tecnologías de punta.

TRANSCRIPT

Page 1: Inyección de dependencia

Inyección de Dependencia

[email protected]

@aparedes82

http://elblogdelfrasco.blogspot.com

Page 2: Inyección de dependencia

● Proyecto Base● Conceptos● Spring● Java EE● Spring V.S. Java EE

Agenda

Page 3: Inyección de dependencia

Proyecto Base

Page 4: Inyección de dependencia

Modelo de Dominio

Page 5: Inyección de dependencia

Repositorio de Proyectos

Page 6: Inyección de dependencia

Arquitectura de 3 capas

Page 7: Inyección de dependencia

Buscar Proyecto por Nombre (1)

Page 8: Inyección de dependencia

Buscar Proyecto por Nombre (1)

Page 9: Inyección de dependencia

Buscar Proyecto por Nombre (2)

Page 10: Inyección de dependencia

Buscar Proyecto por Nombre (2)

Page 11: Inyección de dependencia

Conceptos

Page 12: Inyección de dependencia

● Rigidez○ Dificultad para implementar cambios

● Fragilidad○ Tendencia a romperse con cada cambio

● Inmovilidad○ Inhabilidad de reutilizar el código

● Viscosidad○ Del Diseño: los hacks son muy sencillos○ Del Ambiente: lento e ineficiente

Síntomas de un Diseño Corrompido

Page 13: Inyección de dependencia

● Cambios en los Requerimientos○ Inicialmente no contemplados

● Administración de Dependencias○ Es la arquitectura de dependencias la que

se va degradando

Causas que Aceleran la Entropía

Page 14: Inyección de dependencia

● Cambios en los Requerimientos○ Inicialmente no contemplados

● Administración de Dependencias○ Es la arquitectura de dependencias la que

se va degradando

LAS DEPENDENCIASSON MALAS!!!

Causas que Aceleran la Entropía

Page 15: Inyección de dependencia

● Con el uso de interfaces, buscamos invertir el control

● Al trabajar con interfaces y no contra las implementaciones, invertimos el control de la ejecución del código

● En camino a un Diseño Declarativo

Inversión de Control (IoC)

Page 16: Inyección de dependencia

Buscar Proyecto por Nombre (2)

Page 17: Inyección de dependencia

DIP Ad-Hoc

Page 18: Inyección de dependencia

● Los componentes deben depender de abstracciones, no de implementaciones concretas

● Las dependencias que una clase tiene no deben ser asignadas por ella misma sino por un agente externo (Contenedor)

● Inyección de Dependencia● Reflection, Spring, EJB, CDI

Inyección de Dependencia (DIP)

Page 19: Inyección de dependencia

Dependencia por Configuración

Page 20: Inyección de dependencia
Page 21: Inyección de dependencia

● Don't call us, we'll call you● Relacionado con IoC y DIP● Favorece el Bajo Acoplamiento● Favorece la Alta Cohesión

Principio de Hollywood

Page 22: Inyección de dependencia

spring.io

Page 23: Inyección de dependencia

Algunos Proyectos Spring.io● Spring Framework● Spring Boot● Spring Data / Spring XD● Spring Integration● Spring Security● Spring Social● Spring Mobile● Groovy / Grails● Spring MVC / Webflow

Page 24: Inyección de dependencia

DIP Spring

Page 25: Inyección de dependencia

Contextos de Spring● Singleton (una única instancia)● Prototype (sin estado)● Request (para HTTP Request)● Session (para HTTP Session)● Global Session (para Portlets)

Page 26: Inyección de dependencia

Java Enterprise Edition

Page 27: Inyección de dependencia

Algunas Especificaciones Java EE

Page 28: Inyección de dependencia

DIPJava EE (CDI)

Page 29: Inyección de dependencia

Contextos de CDI● RequestScoped (para HTTP Request)● SessionScoped (para HTTP Session)● ApplicationScoped (como singleton)● ConversationScoped (long-running)

● Singleton (similar a ApplicationScoped)● Dependent (atado al bean al que

pertenece; scope default)

Page 30: Inyección de dependencia

Spring V.S. Java EE

Page 31: Inyección de dependencia

Reglas para Comparar (1)● Comparar versiones equivalentes

○ Ejemplo: Spring 3 V.S. Java EE 6● Comparar usando el stack completo:

○ Java EE != EJB y Spring != IoC● No comparar usando Liviano y Pesado:

○ Java EE ya no es más Pesado○ Spring ya no es más Liviano

● La importancia de las especificaciones:○ A menudo Spring usa Java EE

Page 32: Inyección de dependencia

● Ambas plataformas son modulares○ Java EE: Modularización a nivel AS○ Spring: Modularización a nivel Maven

● Ambos plataformas son extensibles○ Ambos pueden integrarse con otros

proyectos○ Spring puede integrarse con Java EE○ Java EE puede integrarse con Spring

Reglas para Comparar (2)

Page 33: Inyección de dependencia

● ¿La era de los Frameworks ha terminado?● La innovación sigue estando en los

Frameworks y Librerías● Ejemplos de Frameworks y Librerías que

se hicieron especificación:○ Hibernate → JPA○ Seam → CDI

Framework V.S. Especificación

Page 34: Inyección de dependencia

● JBoss EAP 6.1: 115.5 Mb● Spring Framework 3.2.3 + Tomcat 7.0.43:

114.1 Mb

Portabilidad

Page 35: Inyección de dependencia

● Write Once, Run Everywhere● Implementaciones Java EE:

○ JBoss AS / WildFly (Red Hat)○ TomEE (Apache)○ Glassfish (Oracle)○ Weblogic (Oracle)○ Websphere (IBM)

● Implementaciones Spring:○ Spring.io (joint venture: EMC Corporation y

VMWare)

Vendor Lock-In

Page 36: Inyección de dependencia

● Robert C. Martin - Principios SOLID● Martin Fowler - Contenedores● http://howtojboss.com/● http://elblogdelfrasco.blogspot.com.ar/

Bibliografía

● Código Fuente:○ https://github.

com/elfrasco/dependency-injection

Page 37: Inyección de dependencia

http://www.epidataconsulting.com/[email protected]

Muchas Gracias