Frage Was ist ein Objektrelationales Mapping-Framework? [Duplikat]


Diese Frage hat hier bereits eine Antwort:

Wie der Titel sagt; Was ist ein ORM-Framework und wofür ist es nützlich?


74
2017-07-20 08:25


Ursprung


Antworten:


Aus Wikipedia:

Objektrelationales Mapping (ORM, O / RM,   und O / R-Zuordnung) in Computersoftware   ist eine Programmiertechnik für   Konvertieren von Daten zwischen Inkompatiblen   Typ Systeme in relationalen Datenbanken   und objektorientierte Programmierung   Sprachen. Dies schafft in der Tat ein   "virtuelle Objektdatenbank", die sein kann   verwendet von innerhalb der Programmierung   Sprache. Es gibt sowohl freie als auch   kommerzielle Pakete verfügbar, die   Objektrelationales Mapping durchführen,   obwohl einige Programmierer sich dafür entscheiden   Erstellen Sie eigene ORM-Tools.

Es eignet sich zum Abstrahieren des Datenspeichers (flache Datei / SQL / was auch immer), um eine Schnittstelle bereitzustellen, die in Ihrem Code verwendet werden kann. Anstatt beispielsweise SQL zu erstellen, um den ersten Benutzer in einer Benutzertabelle zu finden, könnten wir (in rails) folgendes tun:

User.first

Dies würde uns eine Instanz unseres Benutzermodells mit den Attributen des ersten Benutzers in der Benutzertabelle zurückgeben.


46
2017-07-20 08:27



Eine einfache Antwort besteht darin, dass Sie Ihre Tabellen oder gespeicherten Prozeduren in Klassen in Ihrer Programmiersprache einschließen, sodass Sie anstelle von SQL-Anweisungen zur Interaktion mit Ihrer Datenbank Methoden und Eigenschaften von Objekten verwenden.

Mit anderen Worten, anstelle von etwas in der Art:

String sql = "SELECT ... FROM persons WHERE id = 10"
DbCommand cmd = new DbCommand(connection, sql);
Result res = cmd.Execute();
String name = res[0]["FIRST_NAME"];

Du machst so etwas:

Person p = repository.GetPerson(10);
String name = p.FirstName;

oder ähnlicher Code (viele Variationen hier.) Einige Frameworks schreiben auch einen Großteil des Codes als statische Methoden in die Klassen selbst ein, was bedeutet, dass Sie stattdessen Folgendes tun können:

Person p = Person.Get(10);

Einige implementieren auch komplexe Abfragesysteme, so dass Sie Folgendes tun können:

Person p = Person.Get(Person.Properties.Id == 10);

Der Rahmen ist, was diesen Code ermöglicht.

Jetzt, Vorteile. Zuallererst verstecken Sie die SQL von Ihrem Logikcode. Dies hat den Vorteil, dass Sie mehr Datenbank-Engines einfacher unterstützen können. Zum Beispiel haben MS SQL Server und Oracle unterschiedliche Namen für typische Funktionen und unterschiedliche Möglichkeiten, Berechnungen mit Datumsangaben durchzuführen, so dass eine Abfrage, "alle in den letzten 24 Stunden bearbeiteten Personen", unterschiedliche SQL-Syntax für diese beiden Datenbank-Engines mit sich bringt . Dieser Unterschied kann von Ihrem Logikcode entfernt werden.

Darüber hinaus können Sie sich darauf konzentrieren, die Logik zu schreiben, anstatt das gesamte SQL richtig zu machen. Der Code wird in der Regel auch besser lesbar sein, da er nicht alle "Rohrleitungen" enthält, die für die Kommunikation mit der Datenbank erforderlich sind.


226
2017-07-20 08:29



Datenbanken arbeiten normalerweise mit relationalen Modellen: Sie haben Tabellen (vereinfacht: wie eine Tabelle) und Beziehungen zwischen ihnen - Eins-zu-eins, Eins-zu-Viele, Viele-zu-Viele usw., was zum Beispiel für diesen einen Datensatz bedeutet Tabelle A hat viele verwandte Datensätze in Tabelle B. Sie können Daten von ihnen als Zeilen abrufen (Sammlung von Werten, die Zeilen aus Tabelle / Tabellen darstellen) Mehr in Wikipedia.

Moderne Programmiersprachen verwenden Objektmodelle. Objekte haben Methoden, Attribute (einfach oder komplex) usw.

Die ORM-Software führt einen Übergang zwischen diesen Modellen durch. Zum Beispiel setzt es alle verwandten Datensätze aus Tabelle B in ein Attribut von Objekt A. Diese Art von Software macht es einfacher, relationale Datenbanken (am weitesten verbreitet) mit Objekt-Programmiersprachen zu verwenden.


8
2017-07-20 08:32



Wann immer Sie mit ORM (Object Relational Mapper) arbeiten, finden Sie DBAL (Database Abstraction Layer) nebeneinander. Es ist also notwendig zu wissen, was diese sind, um gute Einsichten darüber zu bekommen, was Sie verwenden und was die Vorteile sind, die Sie bekommen.

DBAL (Datenbankabstraktionsschicht) 

Es fungiert als eine Schicht zwischen Ihrem Code und der Datenbank. Unabhängig von Ihrer Datenbank funktioniert der geschriebene Code gut mit kleinen Optimierungen.

Nehmen wir an, dass für das aktuelle Projekt, dass Sie MySQL verwenden, sobald es voll ausgereift ist und sehr viel Verkehr bekommt, plant Ihr Team, die Datenbank aus irgendeinem Grund auf Oracle umzustellen, dann muss der in MySQL geschriebene Code in Oracle-basierte Abfragen umgeschrieben werden. Und das Umschreiben der Abfragen für das gesamte Projekt ist eine mühsame Aufgabe.

Wenn Sie stattdessen DBAL-Bibliotheken verwenden, können Sie die Konfiguration der Datenbank wechseln und sicherstellen, dass Ihr Projekt innerhalb eines Tages betriebsbereit ist (möglicherweise mit einigen kleineren Optimierungen).

ORM (Objektrelationaler Mapper)

Object Relational Mapping (ORM) ist eine Technik (Design Pattern) für den Zugriff auf eine relationale Datenbank aus einer objektorientierten Sprache.

Wenn Sie irgendeine Art von Frameworks wie Symfony (wenn Sie von PHP-Hintergrund kommen) / Hibernate (Java) verwendet haben, dann sind Sie mit diesen vertraut. Es ist nichts anderes Entitäten.

Um im objektorientierten Kontext auf die Datenbank zugreifen zu können und die Objektlogik zu übersetzen, wird diese Schnittstelle als ORM bezeichnet. Es besteht aus dem Objekt, das den Zugriff auf Daten ermöglicht und die Geschäftsregeln für sich behält.

Z.B.

class User{
    private $email;

    private $password;

    public function setEmail($email){
        $this->email = $email;
        return $this;
    }

    public function getEmail(){
        return $this->email;
    }


    public function setPassword($password){
        $this->password = $password;
        return $this;
    }

    public function getPassword(){
        return $this->password;
    }
}

/* To save User details you would do something like this */
$userObj = new User();
$userObj->setEmail('sanitizedEmail');
$userObj->setPassword('sanitizedPassword');
$userObj->save();

/* To fetch user details you would do something like this */
$userObj = new User();
$userDetails = $userObj->find($id);

Z.B. Lehre, Treiben, Rote Bohnen


5
2017-09-17 08:15



ORM ist:

Eine Abstraktion und wie jede Abstraktion macht es Ihnen das Leben leichter.


2
2017-07-20 08:32



Aus Wikipedia: http://en.wikipedia.org/wiki/Object-relational_mapping

Objektrelationales Mapping (ORM-, O / RM- und O / R-Mapping) in Computersoftware ist eine Programmiertechnik zum Konvertieren von Daten zwischen inkompatiblen Typsystemen in relationalen Datenbanken und objektorientierten Programmiersprachen. Dies erzeugt in Wirklichkeit eine "virtuelle Objektdatenbank", die innerhalb der Programmiersprache verwendet werden kann. Es stehen sowohl freie als auch kommerzielle Pakete zur Verfügung, die eine objektrelationale Zuordnung durchführen, obwohl einige Programmierer ihre eigenen ORM-Tools erstellen.

Vor-und Nachteile ORM reduziert oft die Menge an Code, die geschrieben werden muss, wodurch die Software robuster wird (je weniger Codezeilen in einem Programm enthalten sind, desto weniger Fehler sind darin enthalten). [1].

Es gibt Kosten sowie Vorteile für die Verwendung von O / R-Mapping. Zum Beispiel funktionieren einige O / R-Mapping-Tools während der Massenlöschung von Daten nicht gut. Gespeicherte Prozeduren haben möglicherweise eine bessere Leistung, sind jedoch nicht tragbar.


0
2017-07-20 08:27



Es ermöglicht Ihnen, Dinge wie diese zu tun (dies ist Doctrine-Code):

$activeUsers = Doctrine::getTable('User')->createQuery('u')->addWhere('u.active = false');
foreach($activeUsers as $user)
{
   $user->active = true;
   $user->save();
}

0
2017-07-20 08:30



Object-Relational Mapping (ORM) -Bibliotheken bieten diese Zuordnung von Datenbanktabellen zu Domänenobjektklassen.


0
2018-02-12 07:55