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


Top Related