228 votes

Qu'est-ce qu'un ORM, comment fonctionne-t-il et comment dois-je l'utiliser ?

Quelqu'un m'a suggéré d'utiliser un ORM pour un projet que je suis en train de concevoir, mais j'ai du mal à trouver des informations sur ce que c'est ou comment cela fonctionne.

Quelqu'un peut-il me donner une brève explication de ce qu'est un ORM, de son fonctionnement et de la manière dont je devrais commencer à l'utiliser ?

481voto

e-satis Points 146299

Introduction

Cartographie objet-relationnelle (ORM) est une technique qui permet d'interroger et de manipuler les données d'une base de données en utilisant un paradigme orienté objet. Lorsque l'on parle d'ORM, la plupart des gens se réfèrent à un bibliothèque qui met en œuvre la technique du mapping objet-relationnel, d'où l'expression "un ORM".

Une bibliothèque ORM est une bibliothèque tout à fait ordinaire, écrite dans le langage de votre choix, qui encapsule le code nécessaire pour manipuler les données, de sorte que vous n'utilisez plus SQL ; vous interagissez directement avec un objet dans le même langage que celui que vous utilisez.

Par exemple, voici un cas totalement imaginaire avec une pseudo-langue :

Vous avez une classe de livres, vous voulez retrouver tous les livres dont l'auteur est "Linus". Manuellement, vous feriez quelque chose comme ça :

book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
     book = new Book();
     book.setAuthor(row.get('author');
     book_list.add(book);
}

Avec une bibliothèque ORM, cela ressemblerait à ceci :

book_list = BookTable.query(author="Linus");

La partie mécanique est prise en charge automatiquement par la bibliothèque ORM.

Avantages et inconvénients

L'utilisation de l'ORM permet de gagner beaucoup de temps car :

  • SEC : Vous écrivez votre modèle de données à un seul endroit et il est plus facile de mettre à jour, de maintenir et de réutiliser le code.
  • Beaucoup de choses sont faites automatiquement, de la gestion de la base de données à l'utilisation de l'ordinateur. I18N .
  • Il vous oblige à écrire MVC ce qui, en fin de compte, rend votre code un peu plus propre.
  • Vous n'avez pas besoin d'écrire un langage SQL mal formé (la plupart des programmeurs Web sont vraiment nuls dans ce domaine, car le langage SQL est traité comme un "sous" langage, alors qu'il s'agit en réalité d'un langage très puissant et très complexe).
  • L'assainissement, l'utilisation d'états ou de transactions préparés sont aussi simples que l'appel d'une méthode.

L'utilisation d'une bibliothèque ORM est plus souple car :

  • Il s'inscrit dans votre façon naturelle de coder (c'est votre langue !).
  • Il fait abstraction du système de base de données, de sorte que vous pouvez le modifier quand vous le souhaitez.
  • Le modèle est faiblement lié au reste de l'application, de sorte que vous pouvez le modifier ou l'utiliser ailleurs.
  • Il vous permet d'utiliser les avantages de la POO, comme l'héritage de données, sans vous casser la tête.

Mais l'ORM peut s'avérer pénible :

  • Il faut l'apprendre, et les bibliothèques ORM ne sont pas des outils légers ;
  • Vous devez le mettre en place. Même problème.
  • Les performances sont correctes pour les requêtes habituelles, mais un maître SQL fera toujours mieux avec son propre SQL pour les grands projets.
  • Il fait abstraction de la base de données. Bien que cela soit acceptable si vous savez ce qui se passe derrière la scène, c'est un piège pour les nouveaux programmeurs qui peuvent écrire des déclarations très gourmandes, comme un gros coup dans un for boucle.

Comment se familiariser avec l'ORM ?

Eh bien, utilisez-en un. Quelle que soit la bibliothèque ORM que vous choisissez, elles utilisent toutes les mêmes principes. Il y a beaucoup de bibliothèques ORM ici :

Si vous voulez essayer une bibliothèque ORM dans la programmation Web, vous feriez mieux d'utiliser une pile de frameworks complète comme :

  • Symfony (PHP, en utilisant Propel ou Doctrine).
  • Django (Python, utilisant un ORM interne).

N'essayez pas d'écrire votre propre ORM, à moins que vous n'essayiez d'apprendre quelque chose. Il s'agit d'un travail gigantesque, et les anciens ORM ont demandé beaucoup de temps et de travail avant de devenir fiables.

50voto

OscarRyz Points 82553

ORM est l'abréviation de "Object to Relational Mapping", c'est-à-dire "mappage objet-relationnel".

  • En Objet est celle que vous utilisez avec votre langage de programmation ( python dans ce cas )

  • En Relationnel part est un système de gestion de base de données relationnelle (une base de données). Il existe d'autres types de bases de données, mais la plus populaire est relationnelle (vous connaissez les tables, les colonnes, les pk fk, etc. comme Oracle, MySQL, MS-SQL).

  • Enfin, le Cartographie est l'endroit où vous créez un pont entre vos objets et vos tableaux.

Dans les applications où vous n'utilisez pas de cadre ORM, vous le faites à la main. L'utilisation d'un framework ORM vous permettrait de réduire le nombre d'éléments nécessaires à la création de la solution.

Disons que vous avez cet objet.

 class Employee:
      def __init__( self, name ): 
          self.__name = name

       def getName( self ):
           return self.__name

       #etc.

et le tableau

   create table employee(
          name varcar(10),
          -- etc  
    )

L'utilisation d'une structure ORM vous permettrait d'associer automatiquement cet objet à un enregistrement de la base de données et d'écrire quelque chose comme :

   emp = Employee("Ryan")

   orm.save( emp )

Et que l'employé soit inséré dans la base de données.

17voto

Justin Niessner Points 144953

Un ORM (Object Relational Mapper) est un logiciel qui permet de faire correspondre les objets de votre code à votre base de données.

Certains gèrent plus d'aspects que d'autres... mais l'objectif est de soulager le développeur d'une partie du poids de la couche de données.

Voici un bref extrait de Martin Fowler (Data Mapper) :

Modèles d'architecture d'application d'entreprise Mappers de données

4voto

Alex Martelli Points 330805

Comme tous les acronymes, il est ambigu, mais je suppose qu'il signifie mappeur objet-relationnel -- une façon de se voiler la face et de faire croire qu'il n'y a pas de SQL en dessous, mais plutôt des objets;-). Ce n'est pas vraiment vrai, bien sûr, et ce n'est pas sans problème - le toujours coloré Jeff Atwood a décrit l'ORM comme étant le Vietnam de CS ;-). Mais, si vous ne connaissez pas ou peu SQL, et que vous avez un problème assez simple / à petite échelle, ils peuvent vous faire gagner du temps ;-)

2voto

Hamza Riaz Points 21

Le modèle d'objet s'intéresse aux trois concepts suivants Abstraction des données l'encapsulation l'héritage Le modèle relationnel utilise le concept de base d'une relation ou d'une table. Les produits de mappage objet-relationnel (OR mapping) intègrent les capacités du langage de programmation objet aux bases de données relationnelles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X