Was ist ein ORM, wie funktioniert es und wie soll ich eines verwenden? [geschlossen]


230

Jemand hat vorgeschlagen, 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 kurz erklären, was ein ORM ist und wie es funktioniert und wie ich anfangen soll, eines zu verwenden?


8
Ich habe diese Frage gefunden, aber sie stammt aus dem Jahr 2009 und ich weiß nicht, ob Sie ORM bereits beherrschen, aber in CodePlex C # ( entityframework.codeplex.com ) nach Entity Framework suchen. Hier ist der Quellcode, aus dem Sie lernen können. Auch können Sie dies lesen. ( dbtechnet.org/labs/dae_lab/Orm.pdf )
Maximus Decimus

1
Darauf hinweist, dass gerade auch in Beziehung zu ORM - Cam - Objekt-Rollenmodellierung en.wikipedia.org/wiki/Object-role_modeling
O-9

1
Dies ist eine nützliche Frage, und die Stimmen für die Top-Antwort scheinen dies zu bestätigen. Eine kurze Beschreibung von ORM erfordert keine Stellungnahme. Nur weil der Benutzer nach einem Link fragt, um zu beginnen, wird die Frage als nicht zum Thema gehörend markiert. Ich bin der Meinung, dass dies eine häufige Überreaktion von Moderatoren ist.
NeilG

3
@NeilG Eine geschlossene Frage bedeutet, dass die Frage nicht zum Thema gehört. Die Antworten könnten nützliche Informationen enthalten, aber das macht die Frage nicht zum Thema. Es wird auch nicht gelöscht, es bleibt hier, aber wir müssen das SO immer noch sauber und themenbezogen halten, damit es optimal funktioniert. Um Ihren ersten Kommentar zu beantworten: Dies ist keine nützliche Frage, es gibt nützliche Antworten.
M--

1
@NeilG Das Problem ist, dass die Frage eine Anforderung von Ressourcen enthält (sowohl im Titel als auch in der Frage). Solche Anfragen sind nicht zum Thema gehörend, vor allem, weil die Leute nur einen Link zu ihrer bevorzugten Ressource veröffentlichen, wie dies in mehreren Antworten hier geschehen ist. Das Entfernen der Anforderung von Ressourcen aus der Frage würde einige vorhandene Antworten ungültig machen. Als reguläre Benutzer dürfen wir die Frage nicht bearbeiten, um Antworten ungültig zu machen. Daher sollte es geschlossen sein. Wenn die Frage unbeantwortet blieb, konnte sie bearbeitet werden, um diese Anforderungen zu entfernen, und offen gelassen werden.
Makyen

Antworten:


483

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 kein SQL mehr verwenden. Sie interagieren direkt mit einem Objekt in derselben Sprache, die Sie verwenden.

Hier ist zum Beispiel ein völlig imaginärer Fall mit einer Pseudosprache:

Wenn Sie eine Buchklasse haben, möchten Sie 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 es so aussehen:

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

Das mechanische Teil wird automatisch über die ORM-Bibliothek erledigt.

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 Datenbankverwaltung bis hin 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 Webprogrammierer saugen wirklich daran, weil SQL wie eine "Sub" -Sprache behandelt wird, obwohl es in Wirklichkeit eine sehr leistungsfähige und komplexe Sprache ist).
  • Desinfektion; Die Verwendung vorbereiteter 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 schwach an den Rest der Anwendung gebunden, sodass Sie es ändern oder an anderer Stelle verwenden können.
  • Damit 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 normale Abfragen in Ordnung, aber ein SQL-Master kann mit seinem eigenen SQL für große Projekte immer besser 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 Aussagen schreiben können, wie ein schwerer Treffer in einer forSchleife.

Wie lerne ich ORM kennen?

Verwenden Sie eine. Unabhängig davon, für welche ORM-Bibliothek Sie sich entscheiden, verwenden alle dieselben Prinzipien. Hier gibt es viele ORM-Bibliotheken:

Wenn Sie eine ORM-Bibliothek in der Webprogrammierung ausprobieren möchten, sollten Sie einen gesamten Framework-Stack wie folgt verwenden:

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

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


50

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

Sicher.

ORM steht für "Object to Relational Mapping"

  • Der Objektteil ist derjenige, den Sie mit Ihrer Programmiersprache verwenden (in diesem Fall Python).

  • Der relationale Teil ist ein relationales Datenbankmanagersystem (eine Datenbank, dh es gibt andere Arten von Datenbanken, aber der beliebteste ist relational (Sie kennen Tabellen, Spalten, pk fk usw., z. B. Oracle MySQL, MS-SQL).

  • Und schließlich stellen Sie im Mapping- Teil eine Brücke zwischen Ihren Objekten und Ihren Tabellen.

In Anwendungen, in denen Sie kein ORM-Framework verwenden, tun Sie dies von Hand. Durch die Verwendung eines ORM-Frameworks können Sie die zum Erstellen der Lösung erforderliche Boilerplate reduzieren.

Nehmen wir also an, 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 lassen Sie den Mitarbeiter in die DB einfügen.

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



4

Wie alle Akronyme ist es mehrdeutig, aber ich nehme an, sie bedeuten objektrelationalen Mapper - eine Möglichkeit, Ihre Augen zu bedecken und zu glauben, dass kein SQL darunter liegt, sondern alles Objekte ;-). Natürlich nicht wirklich wahr und nicht ohne Probleme - der immer farbenfrohe Jeff Atwood hat ORM als das Vietnam der CS beschrieben ;-). Wenn Sie jedoch wenig oder gar kein SQL kennen und ein ziemlich einfaches / kleines Problem haben, können Sie Zeit sparen! -)


2

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.