Tengo un componente que necesita actualizar la base de datos para el cliente y la dirección del cliente (a través de JDBC). ¿Es apropiado llamar a CustomerAddressDAO desde CustomerDAO? ¿O crea un componente separado "CustomerDataManager" que los llame por separado?¿Puede un DAO llamar a DAO?
Respuesta
Usted puede hacerlo, pero eso no significa que deba hacerlo. En estos casos, me gusta usar un Servicio (CustomerService
en este caso) que tiene una llamada a método que utiliza ambos DAO. Puede definir la transacción en torno al método de servicio, de modo que si una llamada falla, ambas retroceden.
El problema con los DAO que llaman a otros DAO es que terminará rápidamente con referencias circulares. La inyección de dependencia se vuelve mucho más difícil.
Puede llamar a un DAO de otro, pero también considere construir CustomerAddressDAO en CustomerDAO (después de todo, se trata de un cliente y no creo que quiera tener la dirección del cliente sin el cliente).
Obviamente, puede hacerlo de diferentes maneras. Pero, para responder correctamente a esta pregunta, debe comenzar por su modelo. En el modelo, vea si la dirección es una entidad (algo con su propia identificación y también utilizada de manera independiente), o es un tipo de valor (algo que solo tiene sentido en el contexto de un cliente.) Entonces tendrá dos casos:
dirección es una Entidad: En este caso, la dirección tiene su propia Dao y de atención al cliente tiene su propio Dao Ni Dao debe acceder a la otra Si hay cierta lógica que necesita para manipular los dos, entonces eso.. tiene que estar en su lógica de aplicación, no en la capa de acceso a datos.
La dirección es un tipo de valor asociado con el cliente: En este caso, la dirección no tiene un DAO separado de itse si. Se está guardando/restaurando como parte del objeto Cliente que lo contiene.
Conclusión: Si se diseñan correctamente, los DAO no se acceden entre sí (en situaciones estándar).
"Si hay alguna lógica que necesita manipular los dos, entonces tiene que estar en la lógica de la aplicación, no en la capa de acceso a datos". - ¿Y si necesita ser transaccional? (Por ejemplo, necesito asegurarme de que tanto el cliente como la dirección se eliminen) – HEATH3N
¡Esta es una muy buena pregunta! Creo que, en ese escenario, tiene sentido tener la dirección como un tipo de valor asociado con el cliente. Esto permite manipular la dirección junto con el cliente, p. eliminación de los dos. –
- 1. ¿Llamar a un DAO desde otro DAO?
- 2. ¿Un DAO por hilo o DAO con hilo?
- 3. Generador DAO para java
- 4. SpringMVC Anotaciones para la interfaz DAO y aplicación DAO
- 5. DAO y Servicio?
- 6. Escribir pruebas para DAO
- 7. patrón y relaciones dao
- 8. Estructura del paquete DAO
- 9. DAO, Spring e Hibernate
- 10. Pruebas unitarias DAO
- 11. DTO DAO POCO BO
- 12. Patrón de diseño DAO
- 13. DAO genérico en Java
- 14. DAO de validar la entrada
- 15. cómo crear un DAO para unir tablas?
- 16. Patrón DAO y objetos modelo
- 17. Patrón DAO vs ORM (hibernación)
- 18. ¿Cómo diseñar una clase DAO?
- 19. JDBC DAO - ¿Alguna buena implementación de referencia?
- 20. ¿Está bien tener objetos Singleton DAO?
- 21. ¿La mejor práctica para el patrón DAO?
- 22. ORMLite para Android: Enlace DAO con Roboguice
- 23. diferencias de ORM/DAO/DataMapper/ActiveRecord/TableGateway?
- 24. Diferencia entre Active Record y DAO?
- 25. Primavera + Hibernate, Autowire sessionFactory en DAO
- 26. ¿Hay alguna buena implementación genérica JPA DAO?
- 27. Pruebas unitarias DAO, ¿lo estoy haciendo bien?
- 28. ¿El patrón DAO está obsoleto en Scala?
- 29. Separación de preocupaciones - DAO, DTO y BO
- 30. Patrón DAO: ¿dónde caben las transacciones?
¿Qué le impide hacer esto en la capa empresarial? – Andre