En el ámbito del software , un objeto de acceso a datos ( DAO ) es un patrón que proporciona una interfaz abstracta a algún tipo de base de datos u otro mecanismo de persistencia . Al mapear las llamadas de la aplicación a la capa de persistencia, el 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 la aplicación necesita, en términos de objetos y tipos de datos específicos del dominio (la interfaz pública del DAO), de cómo se pueden satisfacer estas necesidades con un sistema de gestión de bases de datos (DBMS ) específico (la implementación del 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, tradicionalmente se asocia 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 directrices de mejores prácticas de Sun Microsystems [ 1 ] "Core J2EE Patterns".
Este objeto se puede encontrar en la capa de acceso a datos de la arquitectura de 3 niveles .
Existen diversas formas de implementar este objeto:
- Un DAO por cada tabla.
- Un único DAO para todas las tablas de un sistema de gestión de bases de datos (DBMS) específico.
- Cuando la consulta SELECT se limita únicamente a su tabla de destino y no puede incorporar JOINS, UNIONS, subconsultas ni expresiones de tabla comunes (CTE).
- Donde la consulta SELECT puede contener cualquier cosa que permita el sistema de gestión de bases de datos (DBMS).
Ventajas
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 de negocio cambia, puede basarse en una interfaz DAO consistente. Mientras tanto, las modificaciones en la lógica de persistencia no afectarán a los clientes DAO. [ 2 ] [ 3 ]
Todos los detalles de almacenamiento se ocultan al resto de la aplicación (véase ocultación de información ). Las pruebas unitarias se facilitan sustituyendo el DAO por un objeto simulado, lo que hace que las pruebas sean independientes de la capa de persistencia .
En el contexto del lenguaje de programación Java , las DAO se pueden implementar de diversas maneras. Estas pueden abarcar desde una interfaz bastante simple que separa el acceso a los datos de la lógica de la aplicación, hasta frameworks y productos comerciales.
Tecnologías como Java Persistence API y Enterprise JavaBeans vienen integradas en los servidores de aplicaciones y pueden utilizarse en aplicaciones que emplean un servidor de aplicaciones Java EE. Existen productos comerciales como TopLink basados en mapeo objeto-relacional (ORM). Entre el software ORM de código abierto más popular se encuentran Doctrine , Hibernate , iBATIS e implementaciones de JPA como Apache OpenJPA . [ 4 ]
Desventajas
Entre las posibles desventajas del uso de DAO se incluyen la abstracción deficiente , la duplicación de código y la inversión de abstracción . En particular, la abstracción del DAO como un objeto Java regular puede ocultar el alto costo de cada acceso a la base de datos. Los desarrolladores pueden realizar inadvertidamente múltiples consultas a la base de datos para recuperar información que podría devolverse en una sola operación. Si una aplicación requiere varios DAO, es posible que se deba escribir el mismo código de creación, lectura, actualización y eliminación para cada uno de ellos. [ 5 ]
Tenga en cuenta que estas desventajas solo aparecen cuando se tiene un DAO independiente para cada tabla y se impide que la consulta SELECT acceda a cualquier cosa que no sea la tabla de destino.
Herramientas y marcos de trabajo
- Sistema de mapeo objeto-relacional (ORM) basado en compilador ODB para C++
- ORMLite: Marco de trabajo ligero de mapeo objeto-relacional (ORM) en Java para JDBC y Android [ 6 ]
- Microsoft Entity Framework
- Módulo de mapeo objeto-relacional (ORM) DBIx::Class para Perl
- TuxORM: Biblioteca sencilla de mapeo objeto-relacional (ORM) en Java para JDBC.
- Persist (herramienta Java) Herramienta de mapeo objeto-relacional y acceso a datos basada en Java
Véase también
Referencias
- ↑ "Patrones básicos de J2EE: objetos de acceso a datos" . Sun Microsystems Inc. 2 de agosto de 2007.
- ↑ "Patrón de diseño de objeto de acceso a datos (DAO)" . DigitalOcean . 3 de agosto de 2022. Consultado el 8 de julio de 2024 .
- ↑ "Patrón de diseño de objeto de acceso a datos (DAO)" . GeeksforGeeks . 26 de agosto de 2017. Consultado el 8 de julio de 2024 .
- ↑ "Patrón de diseño de objeto de acceso a datos (DAO)" . GeeksforGeeks . 26 de agosto de 2017. Consultado el 29 de enero de 2024 .
- ↑ Consulte http://www.ibm.com/developerworks/java/library/j-genericdao/index.html para obtener soluciones alternativas
- ↑ Hodgson, Kyle; Reid, Darren (23 de enero de 2015). ServiceStack 4 Cookbook . Packt Publishing Ltd. pág. Capítulo 4. ISBN 9781783986576Consultado el 22 de junio de 2016 .
- Patrón arquitectónico (informática)
- patrones de diseño de software