Ce este un ORM, cum funcționează, și cum ar trebui să folosesc?

Cineva a sugerat sa folosesc un ORM pentru un proiect pe care eu'm de proiectare, dar am'm având probleme în a găsi informații cu privire la ce este sau cum funcționează.

Poate cineva sa-mi dea o scurtă explicație a ceea ce o ORM este și cum funcționează acesta și cum ar trebui să începeți să utilizați unul?

Comentarii la întrebare (7)

Introducere

Object-Relational Mapping (ORM) este o tehnica care vă permite să interogare și manipula datele dintr-o bază de date folosind un obiect-orientate paradigmă. Atunci când vorbim despre ORM, majoritatea oamenilor se referă la o biblioteca care implementează Object-Relational Mapping tehnica, prin urmare, expresia "ORM".

O ORM biblioteca este o bibliotecă obișnuită scris în limba dvs. de a alege care încapsulează codul necesar pentru a manipula datele, astfel încât să don't de a folosi SQL mai; interacționează direct cu un obiect în aceeași limbă-ai're folosind.

De exemplu, aici este un caz imaginar, cu un pseudo-limbaj:

Aveți o carte de clasa, doriți să preluați toate cărțile al căror autor este "Linus". Manual, v-ar face ceva de genul asta:

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

Cu un ORM bibliotecă, acesta ar arata astfel:

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

Partea mecanică este luate de îngrijire în mod automat prin intermediul ORM bibliotecă.

Argumente pro și Contra

Folosind ORM salvează o mulțime de timp, deoarece:

  • USCAT: a scrie model de date într-un singur loc, și-l's ușor de a actualiza, de a menține și reutilizarea codului.
  • O mulțime de lucruri se face automat, din baza de date de manipulare a I18N.
  • Se obligă să scrie MVC cod, care, în cele din urmă, face codul dvs. un pic mai curat.
  • Nu't trebuie să scrie prost-format SQL (de cele mai multe programatori Web pricepi, deoarece SQL este tratat ca un "sub" limba, când în realitate ea's un foarte puternic și complex).
  • Igienizare; folosind declarații pregătite sau tranzacțiile sunt la fel de ușor ca a apela o metoda.

Folosind o bibliotecă ORM este mult mai flexibil, deoarece:

  • Se potrivește în mod natural de codificare (it's limba ta!).
  • Se rezumate DB sistem, astfel încât să puteți schimba ori de câte ori doriți.
  • Modelul este slab legat de restul aplicației, astfel încât să puteți schimba sau de a folosi oriunde altundeva.
  • Acesta vă permite să utilizați OOP bunătatea ca moștenire de date fără o durere de cap.

Dar ORM poate fi o durere:

  • Trebuie să-l învețe, și ORM bibliotecile nu sunt instrumente ușoare;
  • Trebuie să-l configurați. Aceeasi problema.
  • Performanta este OK, pentru ca de obicei interogări, dar un SQL maestrul va face întotdeauna mai bine cu propria lui SQL pentru proiecte mari.
  • Se rezumate DB. În timp ce-l'e OK daca stii ce's-a întâmplat în spatele scenei, l's-o capcană pentru noi programatori care pot scrie foarte lacom declarații, cum ar fi o lovitură grea într-o "pentru" bucla.

Cum de a învăța despre ORM?

Ei bine, folosește-o. Indiferent ORM biblioteca ai alege, toate folosesc aceleași principii. Există o mulțime de ORM bibliotecile de aici:

Dacă doriți să încercați o bibliotecă ORM în programare Web, ai'd fi mai bine folosind un întreg cadru de stivă, cum ar fi:

  • Symfony (PHP, folosind Propulsa sau Doctrina).
  • Django (Python, folosind un intern ORM).

Nu încercați să scrie propriile ORM, dacă sunteți încercarea de a învăța ceva. Aceasta este o bucată uriașă de muncă, iar cele vechi au luat o mulțime de timp și de muncă înainte de ei au devenit adevarate.

Comentarii (3)

Poate cineva sa-mi dea o scurtă explicație...

Sigur.

ORM standuri pentru "Obiect Relational Mapping" în cazul în care

  • A ** Obiect parte este cea pe care o utilizați cu limbaj de programare ( python, în acest caz )

  • A Relaționale parte este o bază de Date Relațională Manager Sistem ( baza de date ) există și alte tipuri de baze de date, dar cel mai popular este relațională ( stii tabele, coloane, pk fk etc de exemplu, Oracle, MySQL, MS-SQL )

  • Și în cele din urmă Cartografiere parte este în cazul în care vă face o punte de legătură între obiecte și tabele.

În aplicații în cazul în care nu't folosi un framework ORM puteți face acest lucru de mână. Utilizarea unui ORM-cadru ar permite o faci reduce șabloane necesare pentru a crea o soluție.

Deci sa's spun că au acest obiect.

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

       def getName( self ):
           return self.__name

       #etc.

și masă

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

Utilizarea unui ORM-cadru ar permite să hartă acel obiect cu un db record mod automat și de a scrie ceva de genul:

   emp = Employee("Ryan")

   orm.save( emp )

Și-au angajat introdus în DB.

Hopa ca nu a fost asa scurt dar sper că este destul de simplu pentru a prinde alte articole ai citit.

Comentarii (0)

ORM (Object Relational Mapper) este o bucată/strat de software care vă ajută hartă codul de Obiecte a bazei dumneavoastră de date.

Unele se ocupe de mai multe aspecte decât alții, dar scopul este de a lua unele dintre greutatea Stratului de Date de la dezvoltator's umeri.

Aici's un scurt clip de la Martin Fowler (Date Mapper):

Modele de Enterprise Application Architecture Date Cartografi

Comentarii (0)

Ca toate acronimele l's ambiguu, dar presupun că se referă la obiect-relaționale mapper ... o modalitate de a-ți acoperi ochii și să cred că's nu SQL dedesubt, dar mai degrabă l's toate obiectele;-). Nu-i adevărat, desigur, și nu fără probleme ... mereu colorate Jeff Atwood a descris ORM cât Vietnam CS;-). Dar, dacă știi puțin sau deloc SQL, și au o destul de simplu / scară mică problemă, ei pot economisi timp!-)

Comentarii (0)

Modelul de obiect este în cauză cu următoarele trei concepte Date De Abstractizare Încapsulare Moștenirea În modelul relațional folosit conceptul de bază de o relație sau de masă. Object-relational mapping (SAU de cartografiere) produse integra obiect limbaj de programare capacitățile cu baze de date relaționale.

Comentarii (0)