it-swarm.com.de

Was ist ein ORM, wie funktioniert es und wie soll ich es verwenden?

Jemand schlug vor, ein ORM für ein Projekt zu verwenden, das ich entwerfe, aber ich habe Probleme, Informationen darüber zu finden, was es ist oder wie es funktioniert.

Kann mir jemand eine kurze Erklärung geben, was ein ORM ist und wie es funktioniert und wie ich damit anfangen soll?

230
Ryan

Einführung

Object-Relational Mapping (ORM) ist eine Technik, mit der Sie Daten aus einer Datenbank mithilfe eines objektorientierten Paradigmas abfragen und bearbeiten können. Wenn es um ORM geht, beziehen sich die meisten Leute auf eine Bibliothek, die die objektrelationale Zuordnungstechnik implementiert, daher der Ausdruck "ein ORM".

Eine ORM-Bibliothek ist eine ganz normale Bibliothek, die in der Sprache Ihrer Wahl geschrieben ist und den Code enthält, der zum Bearbeiten der Daten erforderlich ist, sodass Sie SQL nicht mehr verwenden. Sie interagieren direkt mit einem Objekt in derselben Sprache, die Sie verwenden.

Zum Beispiel ist hier ein völlig imaginärer Fall mit einer Pseudosprache:

Sie haben eine Buchklasse, Sie möchten alle Bücher abrufen, deren Autor "Linus" ist. Manuell würden Sie so etwas tun:

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

Mit einer ORM-Bibliothek würde das so aussehen:

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

Der mechanische Teil wird automatisch über die ORM-Bibliothek abgewickelt.

Vor-und Nachteile

Die Verwendung von ORM spart viel Zeit, weil:

  • DRY : Sie schreiben Ihr Datenmodell nur an einer Stelle und es ist einfacher, den Code zu aktualisieren, zu warten und wiederzuverwenden.
  • Viele Dinge werden automatisch erledigt, von der Datenbankbearbeitung bis zu I18N .
  • Es zwingt Sie, MVC Code zu schreiben, was Ihren Code letztendlich ein wenig sauberer macht.
  • Sie müssen kein schlecht geformtes SQL schreiben (die meisten Web-Programmierer sind begeistert, weil SQL wie eine "Unter" -Sprache behandelt wird, obwohl es in Wirklichkeit eine sehr mächtige und komplexe Sprache ist).
  • Desinfektion; Das Verwenden von vorbereiteten Anweisungen oder Transaktionen ist so einfach wie das Aufrufen einer Methode.

Die Verwendung einer ORM-Bibliothek ist flexibler, weil:

  • Es passt in Ihre natürliche Art der Codierung (es ist Ihre Sprache!).
  • Es abstrahiert das DB-System, sodass Sie es jederzeit ändern können.
  • Das Modell ist nur schwach an den Rest der Anwendung gebunden, sodass Sie es ändern oder an einem anderen Ort verwenden können.
  • Hiermit können Sie OOP Güte wie Datenvererbung ohne Kopfschmerzen verwenden.

Aber ORM kann ein Schmerz sein:

  • Sie müssen es lernen, und ORM-Bibliotheken sind keine einfachen Werkzeuge.
  • Sie müssen es einrichten. Gleiches Problem.
  • Die Leistung ist für gewöhnliche Abfragen in Ordnung, aber ein SQL-Master wird bei großen Projekten immer besser mit seinem eigenen SQL abschneiden.
  • Es abstrahiert die DB. Während es in Ordnung ist, wenn Sie wissen, was hinter den Kulissen passiert, ist es eine Falle für neue Programmierer, die sehr gierige Anweisungen schreiben können, wie ein schwerer Schlag in einer for -Schleife.

Wie erfahre ich mehr über ORM?

Nun, benutze eins. Für welche ORM-Bibliothek Sie sich auch entscheiden, alle verwenden dieselben Prinzipien. Hier gibt es viele ORM-Bibliotheken:

Wenn Sie eine ORM-Bibliothek in der Webprogrammierung ausprobieren möchten, ist es besser, einen gesamten Framework-Stack zu verwenden, z.

  • Symfony (PHP, mit Propel oder Doctrine).
  • Django (Python, mit einem internen ORM).

Versuchen Sie nicht, Ihr eigenes ORM zu schreiben, es sei denn, Sie möchten etwas lernen. Dies ist eine gigantische Arbeit, und die alten haben viel Zeit und Arbeit in Anspruch genommen, bevor sie zuverlässig wurden.

483
e-satis

Kann mir jemand eine kurze Erklärung geben ...

Sicher.

ORM steht dabei für "Object to Relational Mapping"

  • Der Teil Object ist derjenige, den Sie mit Ihrer Programmiersprache verwenden (python)

  • Der relationale Teil ist ein relationales Datenbank-Manager-System (dh eine Datenbank). Es gibt andere Arten von Datenbanken. Am beliebtesten ist jedoch die relationale Datenbank (Sie kennen Tabellen, Spalten, pk fk usw., z. B. Oracle MySQL, MS- SQL)

  • Und schließlich können Sie im Teil Mapping eine Brücke zwischen Ihren Objekten und Ihren Tabellen schlagen.

In Anwendungen, in denen Sie kein ORM-Framework verwenden, tun Sie dies manuell. Durch die Verwendung eines ORM-Frameworks können Sie die für die Erstellung der Lösung erforderliche Boilerplate reduzieren.

Angenommen, Sie haben dieses Objekt.

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

       def getName( self ):
           return self.__name

       #etc.

und der Tisch

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

Wenn Sie ein ORM-Framework verwenden, können Sie dieses Objekt automatisch einem DB-Datensatz zuordnen und Folgendes schreiben:

   emp = Employee("Ryan")

   orm.save( emp )

Und den Mitarbeiter in die DB einfügen lassen.

Hoppla, es war nicht so kurz, aber ich hoffe, es ist einfach genug, um andere Artikel zu lesen, die Sie gelesen haben.

50
OscarRyz

Ein ORM (Object Relational Mapper) ist eine Software, mit der Sie Ihre Codeobjekte in Ihre Datenbank integrieren können.

Einige behandeln mehr Aspekte als andere ... aber der Zweck ist es, den Entwicklern einen Teil des Gewichts der Datenschicht abzunehmen.

Hier ist ein kurzer Clip von Martin Fowler (Data Mapper):

Muster von Enterprise Application Architecture Data Mappern

17
Justin Niessner

Wie alle Akronyme ist es mehrdeutig, aber ich nehme an, sie bedeuten objektrelationaler Mapper - eine Möglichkeit, die Augen zu verschleiern und den Eindruck zu erwecken, dass sich kein SQL darunter befindet, sondern es sind alles Objekte ;-). Natürlich nicht ganz richtig und nicht ohne Probleme - der stets farbenfrohe Jeff Atwood hat ORM als das Vietnam von CS ;-) beschrieben. Aber wenn Sie wenig oder gar kein SQL kennen und ein ziemlich einfaches/kleines Problem haben, können sie Ihnen Zeit sparen! -)

4
Alex Martelli

Das Objektmodell befasst sich mit den folgenden drei Konzepten: Datenabstraktion Kapselung Vererbung Das relationale Modell verwendete das Grundkonzept einer Beziehung oder Tabelle. Produkte für objektrelationale Zuordnung (OR-Zuordnung) integrieren Funktionen der Objektprogrammiersprache in relationale Datenbanken.

2
Hamza Riaz

Storm ist eine großartige Option für Benutzer von Python.

2

Das ist ein riesiges Thema. Holen Sie sich ein gutes Buch über den Winterschlaf, in dem ORM ausführlich erklärt wird, bevor Sie sich mit dem eigentlichen Material über den Winterschlaf befassen.

https://www.hibernate.org/

2
Stefan Kendall

DALMP http://code.google.com/p/dalmp/ könnte für PHP/MySQL gut sein und unterstützt derzeit viele Cache-Backends wie redis/memcache/apc

1
tareco