Solía diseñar mi aplicación en torno al modelo de dominio anémico, así que tenía muchos objetos de repositorio, que se inyectaban a la capa de servicio grande, gorda y con reconocimiento de transacciones. Este patrón se llama secuencia de comandos de transacción. No se considera una buena práctica ya que conduce al código de procedimiento, por lo que quería avanzar hacia el diseño impulsado por el dominio.Diseño impulsado por dominio y transacciones en el entorno Spring
Después de leer un par de artículos en la web, escuchar la charla de Chris Richardson sobre Parleys y leer los capítulos de DDD de POJOs in Action, creo que tengo una idea general.
El problema es que no sé cómo organizar transacciones en mi aplicación. Chis Richardson en su libro afirma:
La capa de presentación se encarga de las peticiones HTTP desde el navegador del usuario llamando el modelo de dominio, ya sea directa o indirectamente a través de una fachada, que como he descrito en el capítulo anterior es o bien un POJO o un EJB.
bien hasta ahora, pero Srini Penchikala en InfoQ article estados:
Algunos desarrolladores prefieren gestionar las transacciones en las clases DAO, que es un mal diseño. Esto da como resultado un control de transacción demasiado detallado que no ofrece la flexibilidad de administrar los casos de uso en los que las transacciones abarcan múltiples objetos de dominio. Las clases de servicio deben manejar las transacciones; De esta forma, incluso si la transacción abarca varios objetos de dominio, la clase de servicio puede gestionar la transacción, ya que en la mayoría de los casos de uso, la clase de servicio maneja el flujo de control.
Ok, si entiendo esto correctamente, las clases de repositorio no deben ser transaccionales, la capa de servicio (que ahora es mucho más delgada) es transaccional (como solía ser en el patrón de script de transacción). Pero, ¿qué sucede si los objetos de dominio son invocados directamente por la capa de presentación? ¿Significa que mi objeto de dominio debe tener un comportamiento transaccional? ¿Y cómo implementarlo en el entorno Spring o EJB?
Esto me parece un poco raro, así que estaría feliz si alguien aclara eso. Gracias.
Agregué la etiqueta java, ya que considera todas las clases de DI + ORM (no solo en java, pero ese es su contexto) – Bozho