Dans les logiciels , un objet d'accès aux données ( DAO ) est un modèle qui fournit une interface abstraite à un type de base de données ou à un autre mécanisme de persistance . En mappant les appels d'application à la couche de persistance, le DAO fournit des opérations de données sans exposer les détails de la base de données. Cette isolation prend en charge le principe de responsabilité unique . Il sépare l'accès aux données dont l'application a besoin, en termes d'objets et de types de données spécifiques au domaine (l'interface publique du DAO), de la manière dont ces besoins peuvent être satisfaits avec un SGBD spécifique (l'implémentation du DAO).
Bien que ce modèle de conception soit applicable à la plupart des langages de programmation, à la plupart des logiciels ayant des besoins de persistance et à la plupart des bases de données, il est traditionnellement associé aux applications Java EE et aux bases de données relationnelles (accessibles via l' API JDBC en raison de son origine dans les directives de bonnes pratiques de Sun Microsystems « Core J2EE Patterns ».
Cet objet se trouve dans la couche d'accès aux données de l' architecture à 3 niveaux .
Il existe différentes manières d'implémenter cet objet :
- Un DAO pour chaque table.
- Un DAO pour toutes les tables d'un SGBD particulier.
- Lorsque la requête SELECT est limitée uniquement à sa table cible et ne peut pas incorporer de JOINS, UNIONS, de sous-requêtes et d'expressions de table communes (CTE)
- Où la requête SELECT peut contenir tout ce que le SGBD autorise.
Avantages
L'utilisation d'objets d'accès aux données (DAO) offre un avantage évident : elle sépare deux parties d'une application qui n'ont pas besoin de se connaître. Cette séparation leur permet d'évoluer indépendamment. Si la logique métier change, elle peut s'appuyer sur une interface DAO cohérente. En même temps, les modifications apportées à la logique de persistance n'affecteront pas les clients DAO.
Tous les détails du stockage sont masqués du reste de l'application (voir masquage des informations ). Le code de test unitaire est facilité en remplaçant le DAO par un double de test dans le test, ce qui rend les tests indépendants de la couche de persistance.
Dans le contexte du langage de programmation Java , DAO peut être implémenté de différentes manières. Cela peut aller d'une interface assez simple qui sépare l'accès aux données de la logique d'application, à des frameworks et des produits commerciaux.
Des technologies telles que Java Persistence API et Enterprise JavaBeans sont intégrées aux serveurs d'applications et peuvent être utilisées dans des applications qui utilisent un serveur d'applications Java EE. Des produits commerciaux tels que TopLink sont disponibles sur la base du mappage objet-relationnel (ORM). Les logiciels ORM open source les plus populaires incluent Doctrine , Hibernate , iBATIS et les implémentations JPA telles qu'Apache OpenJPA .
Inconvénients
Les inconvénients potentiels de l'utilisation de DAO incluent l'abstraction fuyante , duplication de code inversion d'abstraction . En particulier, l'abstraction du DAO en tant qu'objet Java ordinaire peut masquer le coût élevé de chaque accès à la base de données. Les développeurs peuvent par inadvertance effectuer plusieurs requêtes de base de données pour récupérer des informations qui pourraient être renvoyées en une seule opération. Si une application nécessite plusieurs DAO, le même code de création, de lecture, de mise à jour et de suppression peut devoir être écrit pour chaque DAO.
Notez que ces inconvénients n'apparaissent que lorsque vous disposez d'un DAO distinct pour chaque table et que la requête SELECT ne peut pas accéder à autre chose que la table cible.
Outils et cadres
- Système de mappage objet-relationnel (ORM) basé sur le compilateur ODB pour C++
- ORMLite : infrastructure de mappage objet-relationnel léger (ORM) en Java pour JDBC et Android
- Cadre d'entité Microsoft
- Module de mappage objet-relationnel (ORM) DBIx::Class pour Perl
- TuxORM : bibliothèque simple de mappage objet-relationnel (ORM) en Java pour JDBC
- Persist (outil Java) Outil d'accès aux données et de mappage objet-relationnel basé sur Java