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

22
ddd PATTERNS JAVA PLATFORM @AlfredoCasado

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

Page 1: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

ddd PATTERNSJAVA PLATFORM

@AlfredoCasado

Page 2: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

¿De que vamos ha hablar?

• Presentación del modelo

• Ejemplo de implementación spring-hibernate anemico

• Ejemplo de implementación spring-hibernate DDD

Page 3: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

MODELO: CARTERAS DE INVERSIÓN

Accion Unidades Cotización Entidad Total

IBM 100 14bankinte

r1400

Yahoo 10 12bank

ofAmerica

120

TOTAL: 1520

Page 4: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.
Page 5: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.
Page 6: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.
Page 7: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

implementación

• Tecnologías utilizadas

• java 1.6

• maven 2

• spring 3.0

• hibernate 3.5 / API JPA 2.0

• JUnit 4.10

Page 8: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

Modelo anémico

Page 9: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

Anotaciones confusas

¡no es una entidad!

detalles de persistencia en el modelo

Page 10: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

Acoplamiento

nos saltamos la ley de demeter

Page 11: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

Reparto de responsabilidades

No seguimos el patrón experto (GRASP)

No seguimos single responsability (SOLID)

Page 12: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

ENTIDADES SIN COLABORADORES

El ORM instancia mis objetos de dominio.

¿Como le inyecto el actualizador de cotizaciones?

Page 13: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

falsa separación entre capas

¿persistence? ¿esto no era el modelo?

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

Page 14: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

falsa separación entre capas

Page 15: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

Posible solución

Page 16: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.
Page 17: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

estructuras de datos

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

Page 18: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

Las entidades tienen colaboradores

volvemos a controlar el proceso de instanciación

RepositorioEF

Page 19: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

Separación más efectiva de responsabilidades

Cartera Inversión

Acción

EntidadFinanciera

Page 20: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

Mantener el ritmo de desarrollo

Tiempo

Productividad

DDDAnémico

Page 21: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

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.

Page 22: Ddd PATTERNS JAVA PLATFORM @AlfredoCasado. ¿De que vamos ha hablar? Presentación del modelo Ejemplo de implementación spring-hibernate anemico Ejemplo.

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.