Idealmente, la forma de almacenar sus datos en una base de datos, y luego cómo acceder a ellos, debe derivar de la naturaleza de la relación entre las entidades de dominio en su modelo de dominio. Es decir, el modelo relacional debe seguir del modelo de dominio. Por ejemplo, si tiene dos entidades, por ejemplo, Usuario y Dirección.
Escenario # 1: La dirección nunca se accede de forma independiente, siempre son un atributo del usuario. En este caso, la dirección es un objeto de valor y el usuario es una entidad, y hay guías sobre cómo almacenar esta relación. Una forma es almacenar los atributos de dirección de la dirección junto a los atributos del usuario, en una sola tabla. En este caso, UserDao manejará ambos objetos.
Escenario n.º 2: La dirección se puede asociar a un usuario, pero también se puede separar por sí misma, una entidad. En este caso, se necesita un enfoque diferente al primero. Puede tener un DAO y una tabla separados para el tipo de Dirección.
Mi punto es que con mayor frecuencia se ignora esta importante idea de que el Modelo de dominio debe ser el núcleo de la aplicación, impulsando otras capas. Por ejemplo, si su modelo de dominio está definido correctamente y usted es consciente del tipo de entidades que posee y de la relación entre ellas, entonces su persistencia (tablas relacionales y sus relaciones, sus DAO, etc.) evolucionará como una consecuencia muy lógica de lo que tienes en el modelo de dominio.
En otras palabras, si pasa algún tiempo estudiando su modelo, podrá rastrear su problema para determinar cómo organizar sus DAO en un lugar en el modelo de dominio. Si puede definir claramente el tipo de objetos y la naturaleza de la relación entre ellos en el modelo de dominio, lo ayudará a resolver su problema en la capa DAL.
"He eliminado el acrónimo DTO de mi vocabulario y código." ¿Puedes explicarme mas? – Casey
Simplemente no veo el punto de llamar a un objeto un 'Objeto de transferencia de datos'. Lleno objetos de dominio directamente en mis DAO, los uso en mis servicios y los expongo en mis vistas (a veces puedo crear objetos de vista alternativos). Los DTO generalmente no tienen ningún comportamiento y son tontos poseedores de propiedades. No veo una razón para limitar mis objetos por lo tanto en una arquitectura de proyecto Java moderna. Y por moderno, generalmente me refiero a no EJB, con un marco como Spring. – pkananen
Ya veo. Más o menos de la misma manera que los uso.Gracias. – Casey