ORM y DAO - pregunta de diseño

Actualmente estoy trabajando en el proyecto donde surgió esta discusión y quería preguntarles a los demás qué piensan acerca de esto.

El patrón DAO es (según wikipedia): "En el software de computadora, un objeto de acceso a datos (DAO) es un objeto que proporciona una interfaz abstracta a algún tipo de base de datos o mecanismo de persistencia, proporcionando algunas operaciones específicas sin exponer detalles de la base de datos . ".

Pero, usando ORM esto es claramente un trabajo ORM (por ejemplo, Hibernate). Proporciona exactamente una interfaz abstracta a algún tipo (casi cualquier) de base de datos.

Revisando algunos últimos proyectos, echemos un vistazo a la capa DAO. El primer paso es siempre hibernate dao genérico con los métodos save (), findById (), findAll (). Esto es para mí simplemente representando los métodos de sesión de hibernación.

Un paso más allá veo interfaces como las propuestas aquí: Patrón DAO genérico en Hibernate, lo que limita completamente el DAO para hibernar la forma de hacer persistencia (fusión, consulta de criterios). Este DAO no se podrá utilizar con otro mecanismo de persistencia que no sea Hibernate.

Así que el final es una pregunta: para un diseño DAO tan común, ¿qué novedades trae el patrón DAO? Si quiero cambiar el motor de la base de datos, lo estoy cambiando a nivel de hibernación. Entonces, ¿esto es realmente algún beneficio actualmente del uso de patrones DAO en aplicaciones ORM?

Recopilemos algo de experiencia:

¿Cuántas veces has visto la jerarquía de clases DAO estrechamente vinculada a Hibernate (u otro ORM) y qué piensas acerca de los beneficios de eso? ¿En cuántos proyectos cambió el mecanismo de persistencia en la forma en que obtuvo los beneficios de la capa DAO (es decir, necesitaba implementar otra capa DAO porque su trabajo no puede hacerse en el nivel ORM cambiando el dialecto db)? ¿En cuántos proyectos acaba de desarrollar una estructura DAO grande (interfaz + clase para cada objeto de dominio) y nunca utilizó esto realmente (es decir, nunca cambió la implementación de la jerarquía DAO base)? ¿Qué piensa, entonces, acerca de las aplicaciones sin capa DAO, simplemente usando la abstracción proporcionada por las sesiones ORM?

Por favor, comparta con la experiencia.

Respuestas a la pregunta(1)

Su respuesta a la pregunta