Welche ORMs unterstützen welche Workflow-Stile

9

Ich habe mit ein paar verschiedenen ORMs in ein paar verschiedenen Sprachen gearbeitet - Es scheint keine Übereinstimmung darüber zu geben, welche Art von dingy die Quelle sein sollte und was generiert werden sollte.

Betrachte diese Dings :

  • Entität: Ein einfaches altes Objekt. Es tut Sachen.
  • Mapper: Ein Objekt, das erstellt eine Entität aus der DB oder besteht sie fort zurück.
  • Tabelle: Eine Datenbanktabelle.
  • Modell: Ein separates Modell, das ein abstract dingy .
  • Verkabelung: A Beschreibung wie die Teile eines Tabelle und Entität sind verwandt.

Das gibt uns diese Workflow-Stile:

  • Modellgesteuert: Sie schreiben ein Modell, und die Entität, Mapper und Tabelle werden generiert.
  • Entity Driven: Sie schreiben eine Klasse und der Mapper und die Tabelle werden generiert.
  • Table Driven: Sie erstellen eine Tabelle und die Entity und Mapper werden generiert.
  • Wire-up: Sie schreiben Klasse, Tabelle und Verdrahtung, der Mapper wird generiert.

Die Fragen:

  • Gibt es einen anderen Stil, den ich nicht bemerkt habe?
  • Welche ORMs unterstützen welche Stile?
  • Gibt es dafür ein Standardvokabular? (Ich habe das obige erfunden.)
Sean McMillan 24.06.2011, 22:01
quelle

3 Antworten

2

Nach dem, was ich bisher gesehen habe, unterstützt Entity Framework mit Hilfe von .NET alle oben genannten Methoden und NHibernate unterstützt, was Sie als modellgetrieben, Entity-Driven und Wire-up bezeichnen (ohne zusätzliche Bibliotheken von Drittanbietern zu verwenden).

NHibernate ist ein Port von Java's Hibernate, also nehme ich an, dass sie dieselben Flüsse unterstützen.

    
Danny Varod 25.06.2011 01:36
quelle
1

Ich entschuldige mich, wenn dies ein wenig off-Thema sein könnte, aber es ist zu groß, um als Kommentar zu passen, also im Voraus warnen, wenn andere nicht denken, dass es das Thema hilft, lösche ich es.

Eine Schlüsselfrage ist, ob Sie und Ihre Anwendung besitzen und der einzige Client ist, der auf die Datenbank zugreift.

Wenn Sie eine vorhandene Datenbank umgehen müssen, ist es wahrscheinlich unmöglich, aus dem Block heraus die Datenbank aus dem Modell zu generieren.

Wenn es von Ihrem System erstellt wird oder nicht, wird es von anderen Systemen aufgerufen (was bedeutet, dass Sie nicht einfach die Datenbank zufällig ändern können, um Logik zu implementieren, oder noch extremere, andere Felder / Tabellen können hinzugefügt werden, um die 3. zu erleichtern) Party-Anwendungen), dann müssen Sie darüber nachdenken, welche Workflows Ihnen erlauben, die Datenbankdetails von Ihrer Implementierung zu abstrahieren, um zu verhindern, dass Sie größere Umschreibungen vornehmen müssen.

Diese Anforderungen können sich während der gesamten Lebensdauer des Projekts ändern, da Sie möglicherweise als einziger Verbraucher beginnen und in Zukunft möglicherweise andere Anwendungen direkt auf dieselbe Datenbank zugreifen. Dies kann der Fall sein, in dem Sie einen auf "Entitäten basierenden" Workflow haben, bei dem Sie einen Layer haben, der die tatsächlichen DB-Tabellen darstellt, und ein Modell, das Ihre in Ihrem System verwendeten Daten darstellt, wird von diesen Änderungen abstrahiert. p>

Und manchmal braucht es Veränderungen, daher sollten das ORM und der Arbeitsablauf, die Sie verwenden, achtsam und zumindest teilweise in der Lage sein, in einer Zukunft zu überleben, die Ihnen möglicherweise nicht zur Verfügung steht. Stellen Sie sich eine Unternehmens- (auch politische) Umgebung vor. Eines Tages taucht ein DBA auf und sagt: "Der gesamte Datenzugriff erfolgt jetzt über SPROCs". Diese Art von Situationen bringt Sie in Richtung "Mapping", wie Sie es nennen.

    
James Harris 16.08.2011 11:24
quelle
0

Das beliebte aktive Aufzeichnungsmuster weist nicht die vollständige Verdrahtungs- und Abbildungskomplexität auf. Eine Modellklasse implementiert Zeilensätze direkt mit Methoden für Persistenz und Domänenmethoden gemischt.

In der ActiveRecord-Bibliothek von Ruby on Rails fungiert die Klasse selbst auch als Modell für die Tabelle, mit Klassenmethoden für find () usw. Sie schreiben also normalerweise nur eine Klasse pro Tabelle.

Ruby AR spiegelt die Tabelle dynamisch wider (für Tabellennamen, Spaltennamen und Typen), daher reicht nach dem Erstellen des Datenbankschemas Folgendes aus:

%Vor%

Ссылка

    
Jürgen Strobel 16.08.2011 11:21
quelle

Tags und Links