inyección de dependencia

Post on 07-Jul-2015

1.965 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

Inyección de Dependencia

adrianp@epidataconsulting.com

@aparedes82

http://elblogdelfrasco.blogspot.com

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

Agenda

Proyecto Base

Modelo de Dominio

Repositorio de Proyectos

Arquitectura de 3 capas

Buscar Proyecto por Nombre (1)

Buscar Proyecto por Nombre (1)

Buscar Proyecto por Nombre (2)

Buscar Proyecto por Nombre (2)

Conceptos

● 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

● 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

● 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

● 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)

Buscar Proyecto por Nombre (2)

DIP Ad-Hoc

● 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)

Dependencia por Configuración

● 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

spring.io

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

DIP Spring

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

Java Enterprise Edition

Algunas Especificaciones Java EE

DIPJava EE (CDI)

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)

Spring V.S. Java EE

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

● 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)

● ¿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

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

114.1 Mb

Portabilidad

● 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

● 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

http://www.epidataconsulting.com/capital.humano@epidataconsulting.com

Muchas Gracias

top related