Welches JavaScript ORM sollten Sie 2018 verwenden?

von John Vandivier

HINWEIS: Mai 2018: Lesen Sie von TypeORM bis LoopBack: Eine Retrospektive für eine aktualisierte Perspektive!

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Dieser Artikel beschreibt Object Relational Mapping (ORM) -Lösungen im JavaScript-Ökosystem und identifiziert eine ideale Lösung basierend auf spezifischen Anforderungen.

Was ist ein ORM und warum ist es so wichtig?

ORM-Lösungen sind nützlich, um die datengesteuerte API-Entwicklung zu erleichtern. Benutzer haben konkrete Bedürfnisse, die das Datenmodell einer Anwendung bestimmen. In der Legacy-Entwicklung wird diese Datenarchitektur typischerweise mithilfe von Datenbankskripten wie SQL-Skripten implementiert und versioniert. Eine separate Bibliothek wird dann für die Serveranwendung verwendet, um CRUD-Aktionen in der Datenbank auszuführen.

ORMs arbeiten als High-Level-API, um CRUD auszuführen, und heutzutage erlauben uns hochwertige ORMs auch, die Daten durch Code zu initialisieren. Komplexe Datenmanipulationen, Bereinigungen usw. sind im Code oft einfacher. Während dedizierte ETL-Tools (Extract, Transform and Load) vorhanden sind, können dieselben ETL-Aufgaben problemlos in ORM implementiert werden.

Durch die Implementierung von extract, transform und load with code kann ein System Daten aus sehr unterschiedlichen Quellen einfacher integrieren. SQL-Datenbanken mit mehreren Varianten, NoSQL-Daten, Dateisystemdaten und Daten von Drittanbietern können alle in einer einzigen Sprache mit einem JavaScript-ORM integriert werden.

Schließlich ermöglicht die codeorientierte Datensteuerung einem System auch, die Datennutzung zur Laufzeit oder im Build-Prozess zu implementieren und die Nutzung während des Entwicklungsprozesses nach Bedarf flexibel anzupassen.Um es noch einmal zu sagen: ORMs verbessern die Produktivität der Entwickler, indem sie eine High-Level-API in einer einzigen Sprache mit Funktionen bereitstellen, die traditionell mehrere verschiedene Tools und Fähigkeiten erfordern. Weniger Qualifikationsbedarf, Werkzeugbedarf und erforderliche Stunden erleichtern die Projektmarge. Unvorhergesehene Anforderungen und der Projektzeitplan sind mit einer flexiblen Build- und Laufzeitdatenkonfiguration besser vorbereitet.

Bevorzugte ORM-Funktionen

Der besondere Projektkontext, der zu dieser ORM-Überprüfung führt, erfordert die Implementierung einer hochmodernen, CMS-ähnlichen, universellen JavaScript-Anwendung.

Modernste universelle JavaScript-Frameworks gibt es im Wesentlichen in 3 Varianten: Angular, React und Vue. Das heißt, Angular Universal, Next und Nuxt.

Node unterstützt nativ Dateisystemoperationen, so dass die Datenanforderungen des Content-Management-Systems eine Präferenz für eine umfassende Datenbankunterstützung darstellen. Insgesamt werden folgende Anforderungen berücksichtigt:

  1. Unterstützung für Mongo und MySQL mit bevorzugter Unterstützung zusätzlicher Optionen
  2. Integration mit Webpack
  3. Integration mit Express
  4. Minimaler Leistungseinbruch zur Laufzeit
  5. Intuitive Syntax
  6. Zusätzliche Funktionen
  7. Hohes Github-Star-to-Issue-Verhältnis
  8. Aktiv gepflegt ohne Build-Fehler oder veraltete Abhängigkeiten

Die Kandidaten und Ergebnisse

Jeder Kandidat erhielt eine Punktzahl zwischen 0 und 10 für jede bevorzugte Fähigkeit. Eine Punktzahl von 5 bedeutet akzeptabel. Der Durchschnitt für eine Spalte kann mehr oder weniger als 5 betragen. Beispielsweise erhält ein ORM mit Unterstützung für mehrere NoSQL-Datenbanken und ohne Unterstützung für eine SQL-Datenbank eine Punktzahl zwischen 2 und 4. 0 zeigt das vollständige Fehlen einer Funktion an.

Sehen Sie sich diesen Beitrag oder dieses Google Sheet an, um auf die Hyperlinks zu klicken oder Daten als Tabelle zu kopieren.

Ein besonderer Gruß an joi, pg und knex. Diese Bibliotheken sind nicht voll, aber sie sind großartig in dem, was sie tun. Wenn Sie kein ausgewachsenes ORM benötigen, schauen Sie nach, ob es Ihren Anforderungen gerecht werden kann.

Fazit

Die Summen spiegeln den allgemeinen Nutzen jeder Lösung wider. Die Top 5 Ergebnisse waren:

  1. Loopback
  2. Waterline
  3. Mongoose
  4. TypeORM
  5. Sequelize

Eine Kombination aus projektspezifischen Bedürfnissen, Umweltfaktoren und persönlichen Vorlieben führte zu den Top 3 Picks.

Waterline ist stark in das Sails-Framework integriert und Mongoose unterstützt nur MongoDB.

Sequelize und NodeORM2 sind auf SQL beschränkt und es fehlt die API-Generierung.

Aufgrund der TypeScript-Syntax lässt sich TypeORM gut in ein Angular-Projekt integrieren.

Als Entwickler empfehle ich, mehr als eine Top-Lösung zu prototypisieren, um den wahren Gewinner zu identifizieren. Zu den Top-3-Lösungen, die alle Prototyping-Kandidaten sind, gehören:

  1. Loopback
  2. TypeORM
  3. Caminte

Ich habe diese Informationen an andere Entwickler des Projekts weitergeleitet, und als Team haben wir beschlossen, TypeORM zuerst auszuprobieren. Schauen Sie später wieder für die Retrospektive!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.