ProGress mit DenoGres

Jan 26 2023
Was Sie über DenoGres 4.0 wissen müssen
Sehr kurzer Überblick über Deno Deno ist eine sich schnell entwickelnde JavaScript-, TypeScript- und WebAssembly-Laufzeitumgebung, die in Rust auf der V8-Engine von Chrome basiert und sichere Standardeinstellungen, integrierte Tools und URL-Importe für das Abhängigkeitsmanagement bietet. Es wurde vom Erfinder von Node, Ryan Dahl, auf der JSconf EU im Jahr 2018 in seinem Vortrag mit dem berühmten Titel „10 Dinge, die ich an Node bereue“ vorgestellt.

Sehr kurzer Überblick über Deno

Deno ist eine schnell wachsende JavaScript-, TypeScript- und WebAssembly-Laufzeitumgebung, die in Rust auf der V8-Engine von Chrome basiert und sichere Standardeinstellungen, integrierte Tools und URL-Importe für das Abhängigkeitsmanagement bietet. Es wurde vom Erfinder von Node, Ryan Dahl, auf der JSconf EU im Jahr 2018 in seinem Vortrag mit dem berühmten Titel „ 10 Dinge, die ich an Node bereue“ vorgestellt . ”

Warum ORMs?

Für diejenigen, die es nicht kennen: ORM steht für Object-Relational Mapper. "Was bedeutet das?" könnte man fragen. Einfach ausgedrückt ermöglicht ein ORM Entwicklern die Arbeit mit relationalen Datenbanken über Objekte und nicht über Abfragezeichenfolgen. Der Wechsel zwischen objektorientierter Programmierung und der deklarativen Syntax von SQL kann mühsam sein und den Arbeitsablauf während der Entwicklung unterbrechen. ORMs ermöglichen einem Entwickler die Interaktion mit seiner Datenbank als Klassen und Instanzen. Zu unserem Vorteil gibt es eine Menge ORM-Tools – leider sind Open-Source-Optionen, die mit erstklassiger TypeScript-Unterstützung entwickelt wurden, begrenzt und noch weniger sind für die Deno-Laufzeitumgebung konzipiert.

DenoGres, eine Lösung

DenoGres bietet ein TypeScript-ORM für Entwickler, die mit PostgreSQL in der Deno-Laufzeit arbeiten. Das Tool untersucht die Datenbank eines Benutzers – einschließlich ihrer Beschriftungen, Typen und Einschränkungen – und transponiert jede Tabelle in eine Klasse, die eine abstrakte „Modell“-Klasse erweitert. Dadurch erhalten diese Tabellenklassen Zugriff auf eine Reihe statischer Eigenschaften und Methoden, die Datenbankabfragen im Hintergrund sicher abwickeln, während ein Benutzer Datenbankinteraktionen über den bekannten OOP-Mechanismus erlebt.

Um mit DenoGres in Ihrem Deno-Projekt zu arbeiten, befolgen Sie diese Befehlszeilenaufforderungen:

Importieren Sie DenoGres in Ihr Projekt:

deno install --allow-read --allow-write --allow-net --allow-env 
--allow-run --name denogres https://deno.land/x/denogres/mod.ts

denogres --init

Untersuchen Sie Ihre Datenbank und erstellen Sie Modelle:

denogres --db-pull

denogres --gui

DenoGres 4.0-Funktionen

DenoGres 4.0 bringt eine Vielzahl von Updates für das bereits leistungsstarke ORM mit sich. Am aufregendsten ist vielleicht, dass es eine Transaktions- und Rollback-Funktion hinzufügt, die es Benutzern ermöglicht, mehrere Abfragen zu stapeln und so die Transaktionsintegrität und ACID-Konformität aufrechtzuerhalten.

Atomarität, das erste Prinzip im ACID-Akronym, ist im Wesentlichen die Regel, dass beim Stapeln mehrerer Abfragen an die Datenbank entweder alle oder gar keine Änderungen festgeschrieben werden sollten. Dies schützt wichtige Tabellen in der Datenbank vor unerwünschten Änderungen im Falle von Abstürzen, Verbindungsproblemen oder erfolglosen Abfragen.

Um Transaktionen in DenoGres zu verwenden, kann ein Benutzer .transaction() an das Ende anderer Abfragemethoden verketten, um eine Transaktion zu erstellen oder fortzusetzen. Transaktionen können modellübergreifend für Batch-Abfragen verwendet werden. Dadurch können Sie sicherstellen, dass wichtige Tabellen synchron bleiben, wenn die Manipulation einer Tabelle auf einer anderen beruht. Um die Transaktion zu beenden, verketten Sie .endTransaction() mit der letzten Abfrage. Wenn eine Abfrage in der Transaktion fehlschlägt, werden alle vorherigen Abfragen zurückgesetzt und diese Tabellen kehren in ihren ursprünglichen Zustand zurück.

Hier ist ein Beispiel:

await Person.insert('name = Alex').transaction();
await Animal.delete().where('name = Spot').transaction();
await Person.insert('nae = Rachel').endTransaction(); 
// throws an error since 'nae' isn't a column, rolls back all previous queries and returns the error for the query that failed

DenoGres 4.0 erhöht außerdem die Codeabdeckung erheblich, um sowohl Benutzern als auch Entwicklern ein optimiertes Erlebnis zu gewährleisten. Jedem potenziellen Anwendungsfall wurde große Aufmerksamkeit geschenkt, was bedeutet, dass Benutzer DenoGres für anspruchsvollere Abfragen verwenden können, ohne befürchten zu müssen, dass Daten durchs Raster fallen.

Die Zukunft von DenoGres

Da DenoGres ein Open-Source-Produkt ist, das unter OSLabs entwickelt wurde, wird das Tool ständig verbessert und es gibt eine Reihe von Funktionen, auf die man sich in Zukunft freuen kann:

  • Mit der SavePoint-Funktionalität können Benutzer größere Transaktionen durchführen, die aufgeteilt werden können, und ein teilweises Rollback der Transaktionen auf einen Sicherungspunkt ermöglichen. Dies ist nützlich für die Implementierung einer komplexen Fehlerbehebung.
  • Eine Setter-Methode, die an Modelle angehängt werden kann, wenn eine Assoziation mit einem anderen Modell hergestellt wird, und so schnelle Ergänzungen zu verwandten Zeilen ermöglicht.
  • Eine ManyToMany-Funktion erstellt eine neue Verbindungstabelle, sodass Benutzer des ORM komplexere Beziehungen zwischen Tabellen initiieren können.

DenoGres 4.0-Mitwirkende:

  • Rachel Cheman | LinkedIn | GitHub
  • Jacob Martin | LinkedIn | GitHub
  • Mia Gussen | LinkedIn | GitHub
  • Alexander Lin | LinkedIn | GitHub