Así que tengo esta cosa genérica de DAO pasando y al valor nominal parece estar bien. Básicamente se basa en la aplicación de muestra CaveatEmptor de los chicos de Hibernate.Patrón DAO: ¿dónde caben las transacciones?
Además de eso, tengo una capa empresarial ... las entrañas de la aplicación. No tiene conocimiento de ninguna implementación específica de DAO.
Todo hasta este punto parece estar bien, hasta que empiezo a pensar en las transacciones. Si las transacciones se dejan al cliente para implementarlas, ¿cómo puedo mantener la agradable separación que tengo entre mis capas? Es decir, estoy usando Hibernate en este momento, y realmente no tengo ganas de agregar transacciones específicas de hibernación a mi código de capa empresarial.
que podría crear una interfaz simple transacción con begin, commit y rollback métodos y pasar una implementación a mi capa de negocio ... pero ... no estoy seguro ...
Así que aquí está el desafío: ¿me pueden recomendar una forma de hacerlo sin usar la palabra Spring (o EJB, o cualquier otro marco adicional)?
Bueno, esto funciona, pero rápidamente terminas con miles de líneas de código duplicadas, para cualquier aplicación comercial realista. –
@Rogerio, no todos los métodos en un objeto comercial son necesariamente una transacción. Si termina con la duplicación, entonces tal vez su dominio no está bien expresado, o puede encontrar una mejor manera de expresarlo. –
Acabo de volver a leer las páginas relevantes sobre las transacciones en el libro PoEAA (71-77), y el autor no recomienda que las transacciones sean un problema comercial (no son * parte del lenguaje comercial, sino una herramienta para *control de concurrencia*). Además, en la práctica, casi todos los métodos involucrados en una operación comercial * deben * ejecutarse en el contexto de una transacción del sistema, incluso si normalmente no tiene una transacción separada para cada método. El punto sigue siendo que una aplicación bien diseñada no debe * tener un código de demarcación de transacción explícito en todas partes, sino solo en uno o dos lugares centrales. –