Che cos'è un ORM, come funziona e come dovrei usarne uno? [chiuso]


230

Qualcuno mi ha suggerito di usare un ORM per un progetto che sto progettando, ma ho difficoltà a trovare informazioni su cosa sia o come funzioni.

Qualcuno può darmi una breve spiegazione di cosa sia un ORM e come funziona e come dovrei iniziare a usarne uno?


8
Ho trovato questa domanda, ma è del 2009 e non so se hai già padroneggiato ORM ma cerchi Entity Framework in CodePlex C # ( entityframework.codeplex.com ) Ecco il codice sorgente da cui puoi imparare. Inoltre puoi leggere questo. ( dbtechnet.org/labs/dae_lab/Orm.pdf )
Maximus Decimus,

1
Voglio solo sottolineare che la cam ORM si riferisce anche alla modellazione di oggetti e ruoli en.wikipedia.org/wiki/Object-role_modeling
O-9

1
Questa è una domanda utile e i voti per la risposta migliore sembrano confermarlo. Una breve descrizione di ciò che è ORM non richiede parere. Solo perché l'utente richiede un collegamento per iniziare, la domanda viene contrassegnata come off-topic. Sento che questa è una frequente reazione eccessiva da parte dei moderatori.
NeilG

3
@NeilG Una domanda chiusa significa che la domanda è fuori tema. Potrebbero esserci informazioni utili nelle risposte, ma ciò non pone la domanda sull'argomento. Inoltre, non verrà eliminato, rimarrà qui, ma dobbiamo comunque mantenere il SO pulito e in tema, in modo che funzioni al meglio. Quindi, per rispondere al tuo primo commento: questa non è una domanda utile, ci sono risposte utili.
M--

1
@NeilG Il problema è che la domanda include una richiesta di risorse (sia nel titolo che nella domanda). Tali richieste sono fuori tema, in gran parte perché portano le persone a pubblicare un link alla loro risorsa preferita, come è successo in molte delle risposte qui. La rimozione della richiesta di risorse dalla domanda invaliderebbe alcune risposte esistenti. Come utenti regolari, non siamo autorizzati a modificare la domanda per invalidare le risposte. Pertanto, dovrebbe essere chiuso. Se la domanda non ha ricevuto risposta, è possibile modificarla per rimuovere tali richieste e lasciarla aperta.
Makyen,

Risposte:


483

introduzione

Object-Relational Mapping (ORM) è una tecnica che consente di eseguire query e manipolare i dati da un database utilizzando un paradigma orientato agli oggetti. Quando si parla di ORM, la maggior parte delle persone si riferisce a una libreria che implementa la tecnica Mappatura relazionale oggetto, da cui la frase "un ORM".

Una libreria ORM è una libreria completamente ordinaria scritta nella tua lingua preferita che incapsula il codice necessario per manipolare i dati, quindi non usi più SQL; interagisci direttamente con un oggetto nella stessa lingua che stai utilizzando.

Ad esempio, ecco un caso completamente immaginario con un linguaggio pseudo:

Hai una lezione di libri, vuoi recuperare tutti i libri di cui l'autore è "Linus". Manualmente, faresti qualcosa del genere:

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);
}

Con una libreria ORM, sarebbe simile al seguente:

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

La parte meccanica viene curata automaticamente tramite la libreria ORM.

Pro e contro

L'uso di ORM consente di risparmiare molto tempo perché:

  • ASCIUTTO : scrivi il tuo modello di dati in un solo posto ed è più facile aggiornare, mantenere e riutilizzare il codice.
  • Molte cose vengono eseguite automaticamente, dalla gestione del database a I18N .
  • Ti costringe a scrivere codice MVC , che, alla fine, rende il tuo codice un po 'più pulito.
  • Non è necessario scrivere SQL scarsamente formato (la maggior parte dei programmatori Web fa davvero schifo, perché SQL viene trattato come un linguaggio "secondario", quando in realtà è un linguaggio molto potente e complesso).
  • sanificazione; usare estratti conto o transazioni preparati è facile come chiamare un metodo.

L'uso di una libreria ORM è più flessibile perché:

  • Si adatta al tuo modo naturale di codificare (è la tua lingua!).
  • Estrae il sistema DB, quindi puoi cambiarlo quando vuoi.
  • Il modello è debolmente associato al resto dell'applicazione, quindi è possibile modificarlo o utilizzarlo in qualsiasi altro luogo.
  • Ti consente di utilizzare la bontà OOP come l'ereditarietà dei dati senza mal di testa.

Ma ORM può essere un dolore:

  • Devi impararlo e le librerie ORM non sono strumenti leggeri;
  • Devi impostarlo. Stesso problema.
  • Le prestazioni sono OK per le normali query, ma un master SQL farà sempre meglio con il proprio SQL per grandi progetti.
  • Estrae il DB. Mentre va bene se sai cosa sta succedendo dietro la scena, è una trappola per i nuovi programmatori che possono scrivere dichiarazioni molto avide, come un duro colpo in un forciclo.

Come conoscere ORM?

Bene, usane uno. Qualunque libreria ORM scegliate, usano tutti gli stessi principi. Ci sono molte librerie ORM qui intorno:

Se si desidera provare una libreria ORM nella programmazione Web, sarebbe meglio usare un intero stack di framework come:

  • Symfony (PHP, usando Propel o Doctrine).
  • Django (Python, usando un ORM interno).

Non provare a scrivere il tuo ORM, a meno che tu non stia cercando di imparare qualcosa. Questo è un lavoro gigantesco, e i vecchi hanno impiegato molto tempo e lavoro prima di diventare affidabili.


50

Qualcuno può darmi una breve spiegazione ...

Sicuro.

ORM sta per "Object to Relational Mapping" dove

  • La parte Object è quella che usi con il tuo linguaggio di programmazione (python in questo caso)

  • La parte relazionale è un sistema di gestione di database relazionale (un database che è) ci sono altri tipi di database ma il più popolare è relazionale (conosci tabelle, colonne, pk fk ecc ecc. Oracle MySQL, MS-SQL)

  • E infine la parte Mappatura è dove fai un ponte tra i tuoi oggetti e le tue tabelle.

Nelle applicazioni in cui non si utilizza un framework ORM, lo si fa manualmente. L'uso di un framework ORM consentirebbe di ridurre la piastra di caldaia necessaria per creare la soluzione.

Quindi diciamo che hai questo oggetto.

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

       def getName( self ):
           return self.__name

       #etc.

e il tavolo

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

L'uso di un framework ORM ti permetterebbe di mappare quell'oggetto con un record db in modo automatico e scrivere qualcosa del tipo:

   emp = Employee("Ryan")

   orm.save( emp )

E fai inserire il dipendente nel DB.

Oops non è stato così breve ma spero che sia abbastanza semplice catturare altri articoli che leggi.



4

Come tutti gli acronimi è ambiguo, ma presumo significhino mappatore relazionale agli oggetti - un modo per coprire i tuoi occhi e far credere che non ci sia SQL sotto, ma piuttosto sono tutti oggetti ;-). Non proprio vero, ovviamente, e non senza problemi - il sempre colorato Jeff Atwood ha descritto ORM come il Vietnam del CS ;-). Ma, se conosci SQL poco o niente e hai un problema piuttosto semplice / su piccola scala, possono farti risparmiare tempo! -)


2

Il modello a oggetti riguarda i tre concetti seguenti: Eredità dell'incapsulamento dell'astrazione dei dati Il modello relazionale utilizzava il concetto di base di una relazione o di una tabella. I prodotti di mappatura relazionale a oggetti (OR mapping) integrano le capacità del linguaggio di programmazione a oggetti con database relazionali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.