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 :
Das gibt uns diese Workflow-Stile:
Die Fragen:
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.
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.
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%Tags und Links orm