Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo...

Post on 26-Jan-2015

13 views 1 download

Transcript of Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo...

ddd PATTERNSJAVA PLATFORM

@AlfredoCasado

¿De que vamos ha hablar?

• Presentación del modelo

• Ejemplo de implementación spring-hibernate anemico

• Ejemplo de implementación spring-hibernate DDD

MODELO: CARTERAS DE INVERSIÓN

Accion Unidades Cotización Entidad Total

IBM 100 14bankinte

r1400

Yahoo 10 12bank

ofAmerica

120

TOTAL: 1520

implementación

• Tecnologías utilizadas

• java 1.6

• maven 2

• spring 3.0

• hibernate 3.5 / API JPA 2.0

• JUnit 4.10

Modelo anémico

Anotaciones confusas

¡no es una entidad!

detalles de persistencia en el modelo

Acoplamiento

nos saltamos la ley de demeter

Reparto de responsabilidades

No seguimos el patrón experto (GRASP)

No seguimos single responsability (SOLID)

ENTIDADES SIN COLABORADORES

El ORM instancia mis objetos de dominio.

¿Como le inyecto el actualizador de cotizaciones?

falsa separación entre capas

¿persistence? ¿esto no era el modelo?

“AOP magic” (con cgi-lib o DynamicProxy)

falsa separación entre capas

Posible solución

estructuras de datos

Son “sólo” estructuras de datos.JPA impide poner “public”.

Las entidades tienen colaboradores

volvemos a controlar el proceso de instanciación

RepositorioEF

Separación más efectiva de responsabilidades

Cartera Inversión

Acción

EntidadFinanciera

Mantener el ritmo de desarrollo

Tiempo

Productividad

DDDAnémico

Hay otras opciones

• Inyectar colaboradores “a mano” via setters

• Inyectar con filtros en la construcción de objetos de hibernate

• Inyectar utilizando AOP con spring

• No usar hibernate, no usar spring

• Google guice es una alternativa seria a spring.

• JDBC, ibatis o queryDSL son alternativas serias a hibernate.

Conclusiones

• Poner los frameworks a nuestro servicio en lugar de estar nosotros al suyo

• Nos obsesionamos con frameworks técnicos y se nos olvida lo básico (OO, patrones, GRASP, SOLID)

• Usamos frameworks que facilitan lo más sencillo (hacer un CRUD) a costa de dificultar lo realmente complejo: construir un buen dominio.

• El desarrollo de software no es construir la versión 1.0 , normalmente consiste en pasar de la N a la N+1.