Le terme ORM vient de l’anglais Object-Relational Mapping. En français, on croise parfois (rarement) le terme mapping objet-relationnel. On trouve des composants O.R.M. dans beaucoup de frameworks pour discuter avec les bases de données. Ces interfaces, appréciées pour simplifier et accélérer le développement, n’en sont pas moins pointées du doigts dès que les performances, la portabilité sont évoquées ou lorsqu’il est nécessaire d’utiliser des points très particuliers propres aux bases de données et non gérés par l’ORM.
Définition d’un ORM en informatique
Il s’agit d’une technique de programmation informatique qui permet de simplifier l’accès à une base de données en proposant à l’informaticien des « objets » plutôt que d’accéder directement à des données relationnelles. Ce niveau d’abstraction supplémentaire fait correspondre le monde objet (programmation orientée objet) et le monde relationnel (les bases de données relationnelles classiques et massivement utilisées aujourd’hui). Concrètement, l’ORM met à disposition des classes objet permettant de manipuler les bases de données relationnelles. Le développeur manipule ainsi des objets et l’ORM transforme le tout en requêtes compréhensibles par la base de données.
L’intérêt principal est d’éviter beaucoup de code très similaire pour l’informaticien ce qui est source d’erreurs et de temps perdu. Ainsi plutôt que de devoir recoder à la main les fonctions de base (CRUD – création, lecture, modification, suppression), les informaticiens ajoutent une couche logicielle intermédiaire qui se charge de la « traduction ».
La difficulté principale consiste à trouver la « bonne traduction » pour toutes les opérations possibles. Souvent, ce n’est pas possible et il faut faire des concessions. Les spécialistes des bases de données leur trouvent beaucoup de défauts. Les développeurs voient surtout une simplification et une accélération de leur temps de développement. La bonne pratique des ORM est certainement dans une utilisation modérée et circonstanciée de ces outils.
Avantages des ORM
- Réduction du code à créer et à maintenir pour l’informaticien qui manipule la base de données depuis son logiciel ;
- Homogénéité du code objet ;
- Pas besoin de se soucier de la base de données sous-jacente ;
- Pas besoin d’écrire de SQL ;
- Promesse de pouvoir changer de base de données sans reprendre le code ;
- Accélération du temps de développement.
Inconvénients des ORM
- Problèmes de mise en place lorsque la base de données n’est pas faite dans les règles de l’art ;
- Problèmes pour faire correspondre la logique de développement objet et les concepts des bases de données relationnelles. Idéalement, avec un ORM il faudrait utiliser une base de données objet ;
- Dépendance à un outil ORM ;
- Rajouter une couche logicielle d’abstraction entraîne des problèmes de maintenance et de performance ;
- Les ORMs ne permettent pas toujours de bien gérer les requêtes un peu complexes (jointures, groupements), les transactions ou les traitements par lots ;
- Masquer la complexité des bases de données derrière un ORM évite d’avoir les bases théoriques nécessaires pour bien construire une base de données et entraîne la conception de logiciels moins solides.
ORM utilisables par langages de programmation
Rares sont les frameworks majeurs qui ne disposent pas d’un ORM :
- PHP : Doctrine que l’on retrouve dans le framework Symfony notamment ou Eloquent utilisé dans le framework Laravel ;
- Python : SQLAchemy, Django, Orator
- NodeJS / Javascript : Mongoose, Bookshelf, Sequelize, Objection
- Ruby : Active record
- Java : Hibernate, JDO, Java Persistence API, TopLink
- .Net : Entity Framework, Linq To SQL ou encore NHibernate ou Dapper