Mapping relationnel/Objet
Quelque soit l'architecture applicative utilisée, la persistance des données occupe une place importante dans l'implémentation de solutions applicatives : elle est primordiale, mais aussi et surtout coûteuse en temps de développement.
La place croissante prise par les développements Objet, y compris dans le monde du Web, a favorisé l'apparition de nouveaux outils : Celle des frameworks de persistance, spécialisés dans le mappage entre le modèle relationnel, et le modèle objet.
ORM signifie Object Relational Mapper
Le mappage Relationnel/Objet se heurte à quelques problèmes dans des mondes aux concepts aussi différents :
- la distinction structurelle entre un objet et un enregistrement/tuple ;
- la notion fondamentale de clé dans le monde relationnel, absente dans le monde objet (seule la référence ou l'adresse mémoire est utilisée) ;
- la différence entre les liens : des relations basées sur l'intégrité référentielle d’un côté, des références sur des objets de l’autre ;
- la notion de navigation, forte en objet et inconnue en relationnel.
Les ORM proposent des solutions pour réunir ces 2 mondes et ces 2 paradigmes. Ils permettent :
- De définir les règles de mappage entre une base de données et un modèle objet
- De charger un enregistrement depuis la BDD pour en faire une instance de classe
- De charger un ensemble d'enregistrements en interrogeant la base de données pour obtenir un ensemble d'objets (collection)
- De sauvegarder un objet dans la BDD sous forme d'enregistrement
- De sauvegarder un ensemble d'objets dans la base de données
- De traduire les relations entre tables sous forme de liens entre classes d'objet :
- pour permettre de charger depuis la base un graphe d'objets correspondant aux objets liés
- pour permettre de mettre à jour dans la base de données ce graphe d'objets modifiés
Design patterns
Il existe 2 familles d'ORM, basées sur 2 patrons de conception différents :
- Active Record
- DataMapper