Welches JavaScript-ORM sollten Sie 2018 verwenden?

HINWEIS: Mai 2018: Lesen von TypeORM zu LoopBack: Eine Retrospektivefür eine aktualisierte Perspektive!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

In diesem Artikel werden ORM-Lösungen (Object Relational Mapping) im JavaScript-Ökosystem beschrieben und eine ideale Lösung basierend auf bestimmten Anforderungen ermittelt.

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 Anforderungen, die das Datenmodell einer Anwendung bestimmen. In der Legacy-Entwicklung wird diese Datenarchitektur normalerweise 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 API auf hoher Ebene, um CRUD auszuführen, und heutzutage ermöglichen uns hochwertige ORMs auch, die Daten durch Code zu initialisieren. Komplexe Datenmanipulationen, Bereinigungen usw. sind im Code häufig 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 des Extrahierens, Transformierens und Ladens mit Code kann ein System Daten aus sehr unterschiedlichen Quellen einfacher integrieren. SQL-Datenbanken mit verschiedenen Varianten, NoSQL-Daten, Dateisystemdaten und Daten von Drittanbietern können mit einem JavaScript-ORM in einer einzigen Sprache integriert werden.

Schließlich ermöglicht die codeorientierte Datensteuerung einem System auch, die Datennutzung zur Laufzeit oder im Erstellungsprozess zu implementieren und die Nutzung während des Entwicklungsprozesses flexibel nach Bedarf anzupassen.

Um es noch einmal zu wiederholen: ORMs verbessern die Entwicklerproduktivität, indem sie eine API auf hoher Ebene in einer einzigen Sprache mit Funktionen bereitstellen, für die traditionell mehrere verschiedene Tools und Fähigkeiten erforderlich sind. Weniger Qualifikationsbedarf, Werkzeugbedarf und erforderliche Stunden erleichtern die Projektmarge. Unvorhergesehene Anforderungen und Projektzeitpläne werden durch flexible Konfiguration von Build- und Laufzeitdaten besser vorbereitet.

Bevorzugte ORM-Funktionen

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

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

Der Knoten unterstützt nativ Dateisystemvorgänge, sodass 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, wobei zusätzliche Optionen bevorzugt werden
  2. In Webpack integrieren
  3. In Express integrieren
  4. Minimale Beeinträchtigung der Leistung zur Laufzeit
  5. Intuitive Syntax
  6. Zusatzfunktionen
  7. Hohes Verhältnis von Github-Stern zu Ausgabe
  8. Aktiv gepflegt ohne Buildfehler oder veraltete Abhängigkeiten

Die Kandidaten und Ergebnisse

Jeder Kandidat erhielt für jede bevorzugte Fähigkeit eine Punktzahl zwischen 0 und 10. 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 Bewertung zwischen 2 und 4. 0 zeigt an, dass eine Funktion vollständig fehlt.

Ein besonderer Gruß an Joi, Pg und Knex. Diese Bibliotheken sind keine vollständigen ORMs, aber sie sind großartig in dem, was sie tun. Wenn Sie kein vollwertiges ORM benötigen, schauen Sie nach, ob es Ihren Anforderungen gerecht wird.

Fazit

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

  1. Loopback
  2. Wasserlinie
  3. Mungo
  4. TypeORM
  5. Fortsetzung

Eine Kombination aus projektspezifischen Anforderungen, ausgelassenen Faktoren und persönlichen Vorlieben führt zu den Top 3.

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 ihnen 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 als Prototyp zu entwickeln, um den wirklichen 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 übermittelt, und als Team haben wir beschlossen, zuerst TypeORM auszuprobieren. Schauen Sie später noch einmal vorbei für die Retrospektive!

Was halten Sie von diesem Ergebnis? Hinterlasse einen Kommentar oder trage deine Gedanken zu diesem Slant-Vergleich bei.