En software , un objeto de acceso a datos ( DAO ) es un patrón que proporciona una interfaz abstracta para algún tipo de base de datos u otro mecanismo de persistencia . Al asignar llamadas de aplicaciones a la capa de persistencia, DAO proporciona operaciones de datos sin exponer los detalles de la base de datos. Este aislamiento respalda el principio de responsabilidad única . Separa el acceso a los datos que necesita la aplicación, en términos de objetos y tipos de datos específicos del dominio (la interfaz pública de DAO), de cómo estas necesidades pueden satisfacerse con un DBMS específico (la implementación de DAO).
Aunque este patrón de diseño es aplicable a la mayoría de los lenguajes de programación, a la mayoría del software con necesidades de persistencia y a la mayoría de las bases de datos, se asocia tradicionalmente con aplicaciones Java EE y con bases de datos relacionales (a las que se accede a través de la API JDBC debido a su origen en las pautas de mejores prácticas de Sun Microsystems). [1] "Patrones principales de J2EE".
Este objeto se puede encontrar en la capa de Acceso a datos de la Arquitectura de 3 niveles .
Hay varias formas en que se puede implementar este objeto:
El uso de objetos de acceso a datos (DAO) ofrece una clara ventaja: separa dos partes de una aplicación que no necesitan conocerse entre sí. Esta separación les permite evolucionar de forma independiente. Si la lógica empresarial cambia, puede depender de una interfaz DAO consistente. Mientras tanto, las modificaciones a la lógica de persistencia no afectarán a los clientes DAO. [2] [3]
Todos los detalles del almacenamiento están ocultos del resto de la aplicación (ver información sobre ocultación ). El código de prueba unitaria se facilita sustituyendo el DAO por un doble de prueba en la prueba, lo que hace que las pruebas sean independientes de la capa de persistencia.
En el contexto del lenguaje de programación Java , DAO se puede implementar de varias maneras. Esto puede variar desde una interfaz bastante simple que separa el acceso a los datos de la lógica de la aplicación hasta marcos y productos comerciales.
Tecnologías como Java Persistence API y Enterprise JavaBeans vienen integradas en servidores de aplicaciones y se pueden utilizar en aplicaciones que utilizan un servidor de aplicaciones Java EE. Productos comerciales como TopLink están disponibles basados en mapeo relacional de objetos (ORM). El popular software ORM de código abierto incluye implementaciones Doctrine , Hibernate , iBATIS y JPA, como Apache OpenJPA . [4]
Las posibles desventajas del uso de DAO incluyen abstracción con fugas , [ cita requerida ] duplicación de código e inversión de abstracción . En particular, la abstracción del DAO como un objeto Java normal puede ocultar el alto costo de cada acceso a la base de datos. Los desarrolladores pueden realizar sin darse cuenta varias consultas a la base de datos para recuperar información que podría devolverse en una sola operación. Si una aplicación requiere múltiples DAO, es posible que deba escribirse el mismo código de creación, lectura, actualización y eliminación para cada DAO. [5]
Tenga en cuenta que estas desventajas solo aparecen cuando tiene un DAO separado para cada tabla y la consulta SELECT no puede acceder a nada que no sea la tabla de destino.