En programari, un objecte d'accés a dades (DAO) és un patró que proporciona una interfície abstracta a algun tipus de base de dades o altre mecanisme de persistència. En assignar crides d'aplicació a la capa de persistència, el DAO proporciona operacions de dades sense exposar els detalls de la base de dades. Aquest aïllament admet el principi de responsabilitat única. Separa l'accés a les dades que necessita l'aplicació, en termes d'objectes específics del domini i tipus de dades (la interfície pública del DAO), de com es poden satisfer aquestes necessitats amb un SGBD específic (la implementació del DAO).
Tot i que aquest patró de disseny és aplicable a la majoria de llenguatges de programació, a la majoria de programari amb necessitats de persistència i a la majoria de bases de dades, tradicionalment s'associa amb aplicacions Java EE i amb bases de dades relacionals (a les quals s'accedeix a través de l'API JDBC a causa del seu origen en les directrius de bones pràctiques de Sun Microsystems "Core J2EE Patterns".
Aquest objecte es pot trobar a la capa d'accés a dades de l'arquitectura de 3 nivells.
Hi ha diverses maneres d'implementar aquest objecte: Un DAO per a cada taula. Un DAO per a totes les taules d'un SGBD concret. On la consulta SELECT està limitada només a la seva taula de destinació i no pot incorporar JOINS, UNIONS, subconsultes ni expressions de taula comunes (CTE). On la consulta SELECT pot contenir qualsevol cosa que permeti el SGBD.
Avantatges L'ús d'objectes d'accés a dades (DAO) ofereix un clar avantatge: separa dues parts d'una aplicació que no necessiten saber l'una de l'altra. Aquesta separació els permet evolucionar de manera independent. Si la lògica de negoci canvia, pot confiar en una interfície DAO coherent. Mentrestant, les modificacions a la lògica de persistència no afectaran els clients DAO.
Tots els detalls de l'emmagatzematge estan ocults a la resta de l'aplicació (vegeu ocultació d'informació). El codi de proves unitàries es facilita substituint un test double pel DAO a la prova, fent així que les proves siguin independents de la capa de persistència.
En el context del llenguatge de programació Java, DAO es pot implementar de diverses maneres. Això pot anar des d'una interfície força senzilla que separa l'accés a les dades de la lògica de l'aplicació, fins a frameworks i productes comercials.
Tecnologies com ara Java Persistence API i Enterprise JavaBeans vénen integrades als servidors d'aplicacions i es poden utilitzar en aplicacions que utilitzen un servidor d'aplicacions Java EE. Productes comercials com ara TopLink estan disponibles basats en el mapatge objecte-relacional (ORM). El programari ORM de codi obert popular inclou Doctrine, Hibernate, iBATIS i implementacions de JPA com ara Apache OpenJPA.
Desavantatges Els possibles desavantatges d'utilitzar DAO inclouen l'abstracció amb fuites, duplicació de codi i inversió d'abstracció. En particular, l'abstracció del DAO com a objecte Java normal pot ocultar l'alt cost de cada accés a la base de dades. Els desenvolupadors poden fer inadvertidament múltiples consultes a la base de dades per recuperar informació que es podria retornar en una sola operació. Si una aplicació requereix múltiples DAO, pot ser que s'hagi d'escriure el mateix codi de creació, lectura, actualització i supressió per a cada DAO.
Tingueu en compte que aquests desavantatges només apareixen quan teniu un DAO separat per a cada taula i s'impedeix que la consulta SELECT accedeixi a res que no sigui la taula de destinació.
Eines i marcs de treball Sistema de mapatge objecto-relacional (ORM) basat en compiladors ODB per a C++ ORMLite: Marc lleuger de mapatge objecto-relacional (ORM) en Java per a JDBC i Android Microsoft Entity Framework Mòdul de mapatge objecto-relacional (ORM) DBIx::Class per a Perl TuxORM: Biblioteca senzilla de mapatge objecto-relacional (ORM) en Java per a JDBC Persist (eina Java) Eina d'objectes d'accés a dades i mapatge d'objectes relacionals basada en Java
Referències
Categoria:Programari Categoria:Dades informàtiques