ddd patterns java platform @alfredocasado. ¿de que vamos ha hablar? presentación del modelo...
TRANSCRIPT
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.