Mappage objet-relationnel - Object–relational mapping

La cartographie objet-relationnelle ( ORM , O/RM et O/R mapping tool ) en informatique est une technique de programmation permettant de convertir des données entre des systèmes de types incompatibles à l' aide de langages de programmation orientés objet. Cela crée, en effet, une " base de données d'objets virtuels " qui peut être utilisée à partir du langage de programmation. Il existe à la fois des packages gratuits et commerciaux qui effectuent un mappage objet-relationnel, bien que certains programmeurs choisissent de construire leurs propres outils ORM.

Dans la programmation orientée objet , les tâches de gestion de données agissent sur des objets qui sont presque toujours des valeurs non scalaires . Par exemple, considérons une entrée de carnet d'adresses qui représente une seule personne avec zéro ou plusieurs numéros de téléphone et zéro ou plusieurs adresses. Cela pourrait être modélisé dans une implémentation orientée objet par un « objet Personne » avec un attribut/champ pour contenir chaque élément de données que l'entrée comprend : le nom de la personne, une liste de numéros de téléphone et une liste d'adresses. La liste des numéros de téléphone contiendrait elle-même des « objets PhoneNumber » et ainsi de suite. Chacune de ces entrées du carnet d'adresses est traitée comme un seul objet par le langage de programmation (elle peut être référencée par une seule variable contenant un pointeur vers l'objet, par exemple). Diverses méthodes peuvent être associées à l'objet, telles que des méthodes pour renvoyer le numéro de téléphone préféré, l'adresse du domicile, etc.

En revanche, de nombreux produits de base de données populaires tels que les systèmes de gestion de base de données SQL (SGBD) ne sont pas orientés objet et ne peuvent stocker et manipuler que des valeurs scalaires telles que des entiers et des chaînes organisés dans des tables . Le programmeur doit soit convertir les valeurs de l'objet en groupes de valeurs plus simples pour le stockage dans la base de données (et les reconvertir lors de la récupération), soit n'utiliser que des valeurs scalaires simples dans le programme. Le mappage objet-relationnel implémente la première approche.

Le cœur du problème consiste à traduire la représentation logique des objets sous une forme atomisée pouvant être stockée dans la base de données tout en préservant les propriétés des objets et leurs relations afin qu'ils puissent être rechargés en tant qu'objets en cas de besoin. Si cette fonctionnalité de stockage et de récupération est implémentée, les objets sont dits persistants .

Aperçu

Les détails spécifiques à l'implémentation des pilotes de stockage sont généralement enveloppés dans une API dans le langage de programmation utilisé, exposant les méthodes pour interagir avec le support de stockage d'une manière plus simple et plus conforme aux paradigmes du code environnant.

Ce qui suit est un exemple simple, écrit en code C# , pour exécuter une requête écrite en SQL à l' aide d'un moteur de base de données.

var sql = "SELECT id, first_name, last_name, phone, birth_date, sex, age FROM persons WHERE id = 10";
var result = context.Persons.FromSqlRaw(sql).ToList();
var name = result[0]["first_name"];

En revanche, ce qui suit utilise une API de tâche ORM, permettant l'écriture de code qui utilise naturellement les fonctionnalités du langage.

var person = repository.GetPerson(10);
var firstName = person.GetFirstName();

Le cas ci-dessus utilise un objet représentant le référentiel de stockage et les méthodes de cet objet. D'autres frameworks peuvent fournir du code en tant que méthodes statiques, comme ci-dessous, et pourtant d'autres méthodes peuvent ne pas implémenter du tout un système orienté objet. Souvent, le choix du paradigme est fait pour adapter au mieux l'ORM aux principes de conception du langage environnant.

var person = Person.Get(10);

Habituellement, le framework exposera certaines fonctionnalités de filtrage et d'interrogation, permettant d'accéder et de modifier des sous-ensembles de la base de stockage. Le code ci-dessous recherche les personnes dans la base de données dont la valeur d'ID est « 10 ».

var person = Person.Get(Person.Properties.Id == 10);

Comparaison avec les techniques traditionnelles d'accès aux données

Par rapport aux techniques traditionnelles d'échange entre un langage orienté objet et une base de données relationnelle, l'ORM réduit souvent la quantité de code à écrire.

Les inconvénients des outils ORM proviennent généralement du haut niveau d' abstraction qui masque ce qui se passe réellement dans le code d'implémentation. En outre, la forte dépendance au logiciel ORM a été citée comme un facteur majeur dans la production de bases de données mal conçues.

Bases de données orientées objet

Une autre approche consiste à utiliser un système de gestion de base de données orienté objet (OODBMS) ou des bases de données orientées document telles que des bases de données XML natives qui offrent plus de flexibilité dans la modélisation des données. Les OODBMS sont des bases de données conçues spécifiquement pour travailler avec des valeurs orientées objet. L'utilisation d'un OODBMS élimine le besoin de convertir les données vers et depuis sa forme SQL, car les données sont stockées dans leur représentation d'objet d'origine et les relations sont directement représentées, plutôt que de nécessiter des tables /opérations de jointure . L'équivalent des ORM pour les bases de données orientées document sont appelés mappeurs de documents objet (ODM).

Les bases de données orientées document évitent également à l'utilisateur d'avoir à « broyer » des objets en lignes de table. Beaucoup de ces systèmes prennent également en charge le langage de requête XQuery pour récupérer des ensembles de données.

Les bases de données orientées objet ont tendance à être utilisées dans des applications de niche complexes. L'un des arguments contre l'utilisation d'un OODBMS est qu'il peut ne pas être en mesure d'exécuter des requêtes ad hoc et indépendantes de l'application. Pour cette raison, de nombreux programmeurs se sentent plus à l'aise avec un système de mappage objet-SQL, même si la plupart des bases de données orientées objet sont capables de traiter les requêtes SQL dans une mesure limitée. D'autres OODBMS fournissent une réplication vers des bases de données SQL, comme moyen de répondre au besoin de requêtes ad-hoc, tout en préservant les modèles de requête bien connus.

Défis

Diverses difficultés surviennent lorsque l'on considère comment faire correspondre un système d'objets à une base de données relationnelle. Ces difficultés sont appelées désadaptation d'impédance objet-relationnelle .

Une alternative à la mise en œuvre de l'ORM est l'utilisation des langages procéduraux natifs fournis avec chaque base de données majeure. Ceux-ci peuvent être appelés depuis le client à l'aide d'instructions SQL. Le modèle de conception Data Access Object (DAO) est utilisé pour faire abstraction de ces instructions et offrir une interface orientée objet légère au reste de l'application.

Voir également

Les références

Liens externes