Data Mapper
Le Data Mapper est un patron de conception spécialisé dans la gestion des données, permettant de séparer la logique métier de la logique de persistance des données. Dans ce modèle, le Data Mapper est responsable de la conversion entre les objets métiers (modèles d'application) et les tables de la base de données. Ce patron aide à garder les objets métiers indépendants de la structure de la base de données, ce qui facilite la maintenance et l'évolution de l'application.
Caractéristiques du Data Mapper
- Indépendance des Objets Métier : Les objets métiers ne contiennent aucune logique de persistance et ne sont pas dépendants de la base de données. Cela permet de tester et de manipuler la logique métier sans se soucier des opérations d'entreposage.
- Encapsulation des détails de persistance : Toute la logique d'accès à la base de données (création, lecture, mise à jour, suppression) est centralisée dans le Data Mapper, agissant comme un intermédiaire entre la base de données et les objets métiers.
- Support des cartographies complexes : Le Data Mapper facilite les cartographies complexes, comme les relations entre tables, les héritages, ou les structures de données imbriquées.
Avantages
- Modularité : En séparant la logique métier de la logique de persistance, le Data Mapper facilite la maintenance et les modifications de l'application.
- Testabilité : Les objets métiers peuvent être testés indépendamment de la base de données, ce qui simplifie les tests unitaires.
- Évolutivité : La structure des objets métiers peut être modifiée sans impacter directement la base de données, et vice versa.
Inconvénients
- Complexité accrue : L'implémentation d'un Data Mapper nécessite du code supplémentaire pour gérer la cartographie entre objets métiers et tables de base de données, surtout dans les applications complexes.
- Performance : Le processus de cartographie ajoute un peu de surcharge, surtout dans les applications nécessitant de fréquents accès à la base de données.
Exemples de Data Mapper
Le Data Mapper est souvent implémenté dans les cadres d'applications et bibliothèques de gestion de données, notamment :
- Hibernate (Java) : Ce cadre d'application ORM utilise le concept de Data Mapper pour convertir les objets Java en enregistrements de base de données.
- Dapper (C#) : Un ORM léger en .NET pouvant être configuré pour fonctionner comme un Data Mapper.
- Doctrine (PHP) : Une bibliothèque ORM en PHP appliquant le modèle Data Mapper pour la persistance des données.
- SQLAlchemy (Python) : Fournit des outils pour faire correspondre des classes Python à des tables SQL, en séparant la logique métier de la logique de persistance.
Exemple Simplifié en Pseudo-Code
Voici un exemple simplifié de Data Mapper en pseudo-code écrit en Free Pascal, où un objet métier Product est géré par un Data Mapper ProductMapper :
- { Objet métier représentant un produit }
- Type
- TProduct=Class
- Id:Integer;
- Name:String;
- Price:Double;
- End;
-
- { Interface du Data Mapper pour le produit }
- Type
- IProductMapper=Interface
- Procedure Save(product: TProduct);
- Function Load(id:Integer):TProduct;
- End;
-
- { Implémentation du Data Mapper }
- Type
- TProductMapper=Class(TInterfacedObject,IProductMapper)
- Procedure Save(Product:TProduct);
- Function Load(id:Integer):TProduct;
- End;
-
- Procedure TProductMapper.Save(Product:TProduct);Begin
- { Code pour sauvegarder l'objet produit dans la base de données }
- End;
-
- Function TProductMapper.Load(id:Integer):TProduct;Begin
- { Code pour récupérer un produit de la base de données en fonction de l'ID }
- End;
Dans cet exemple, l'objet TProduct contient uniquement des données métier et aucune logique de persistance. La classe
TProductMapper gère la persistance et agit comme intermédiaire entre l'objet et la base de données.