ActiveRecord ist der wahre Grund, warum es so cool ist.

ActiveRecord abstrahiert die Datenbank und ermöglicht es, jede Datenbank zu handhaben. Es erklärt den Grund, warum die Abstraktion von ActiveRecord so stark und wertvoll ist.

bamchi 445

ActiveRecord ist wirklich cool, weil es die Datenbank 'abstrahiert', so dass wir jede Datenbank handhaben können.

In der Programmierung ist das schwierigste Problem, verschiedene Systeme auf konsistente Weise zu behandeln.

Datenbanken sind besonders so.

  • MySQL hat diese Syntax

  • PostgreSQL hat jene Syntax

  • SQLite ist wieder anders

  • Oracle ist eine ganz andere Welt

Wenn man all diese direkt behandeln will, muss der Entwickler sich an die DB-Syntax, SQL-Dialekte, Indexierungseigenschaften, Typsysteme und Transaktionsverarbeitung erinnern.

Aber Rails hat all diese Probleme mit nur einer Schicht namens ActiveRecord gelöst.

Das ist genau Abstraktion.


Was ist Abstraktion? (Konzeptuell ohne Analogie)

Der Kern der Abstraktion ist einfach.

Komplexe Systeme in eine einzige gemeinsame Schnittstelle (API) zu vereinheitlichen.

Das bedeutet, dass, auch wenn die Funktionsweise verschieden ist, die Verwendung vereinheitlicht wird.

Abstraktion ist eine der mächtigsten Techniken in der Ingenieurswelt.


Was hat ActiveRecord abstrahiert?

Es gibt nur eine richtige Antwort.

Die SQL-Syntax und das Verhalten, die für jede DB unterschiedlich sind, wurden durch die Manipulation von Ruby-Objekten vereinheitlicht.

Mit anderen Worten,

"Die 'verschiedenen Welten' der DB wurden in 'eine Welt namens Ruby-Code' umgewandelt."


Wie mächtig ist das? Lassen Sie uns das anhand eines Beispiels zeigen

Angenommen, wir möchten eine Liste von Benutzern abrufen.

Wenn Sie direkt SQL verwenden:

MySQL

SELECT * FROM `users` ORDER BY `created_at` DESC LIMIT 10;

PostgreSQL

SELECT * FROM users ORDER BY created_at DESC LIMIT 10;

Oracle

SELECT * FROM users WHERE ROWNUM <= 10 ORDER BY created_at DESC;

Die Syntax ist ganz anders. LIMIT ist anders, die Abfrage-Regeln sind anders, die Schlüsselwörter sind anders.

Aber wenn Sie ActiveRecord verwenden?

Rails

User.order(created_at: :desc).limit(10)

Ende.

ActiveRecord basiert auf diesem einen Ruby-Code und wandelt ihn automatisch in das entsprechende SQL für jede DB um.

  • Für MySQL gibt es MySQL-spezifisches SQL

  • Für PostgreSQL gibt es PostgreSQL-spezifisches SQL

  • Für SQLite gibt es SQLite-spezifisches SQL

Das bedeutet, der Entwickler muss nur Ruby kennen.


Der tatsächliche Wert der Abstraktion

Die Vorteile, die ActiveRecord durch Abstraktion erzielt, sind wie folgt.


1) Der Austausch der DB ist frei

Angenommen, Sie wechseln von SQLite zu PostgreSQL.

Normalerweise:

  • Alle SQLs ändern

  • Alle Typen ändern

  • Alle Transaktionsverarbeitungen ändern

  • Alle LIMIT/OFFSET-Syntax ändern

Aber in Rails...

Es ist nicht notwendig, etwas zu ändern.

Ändern Sie einfach den Adapter in der Rails-Konfiguration.

adapter: postgresql

Der Code bleibt gleich:

User.where(active: true)

Das funktioniert einwandfrei.


2) Sie können entwickeln, ohne etwas über die DB zu wissen

ActiveRecord übernimmt automatisch:

  • Datenspeicherung

  • Bearbeitung

  • Abfrage

  • Löschen

  • Transaktionen

  • Beziehungen

  • Fremdschlüsselverarbeitung

  • JOIN-Optimierung

Der Entwickler muss nur dies tun.

user = User.find(5)
user.update(name: "Neuer Name")

Aber tatsächlich wird im Hintergrund in der DB automatisch ein komplexes SQL ausgeführt:

UPDATE users SET name = 'Neuer Name' WHERE id = 5;

Der Entwickler muss das nicht wissen.


3) Es ermöglicht ein modellzentriertes Denken (Model-driven Thinking)

SQL ist datenzentriertes Denken.

Aber Rails ist objektorientiertes Denken.

Das bedeutet, dass wir das User-Modell wie ein echtes Objekt behandeln.

user.posts

Diese eine Zeile behandelt alles, von JOIN über WHERE bis hin zur INDEX-Interpretation...

Dank ActiveRecord kann sich der Entwickler auf das Design der Geschäftslogik konzentrieren.


Wenn Sie die Abstraktion verstehen, wird deutlich, wie genial ActiveRecord ist

Schauen Sie sich den folgenden Ruby-Code an.

users = User.where("age > ?", 18).order(:created_at)

Wenn dieser Code ausgeführt wird, passiert intern Folgendes:

  1. Überprüfen der Struktur des Modells

  2. Überprüfen des DB-Typs

  3. Sicheres Escapen der WHERE-Bedingung

  4. Anwenden der Sortierreihenfolge

  5. Umwandeln in SQL-Syntax, die die jeweilige DB versteht

  6. Ausführen des SQL

  7. Die zurückgegebenen Werte in Objekte (User) umwandeln

All diese Schritte sind für den Entwickler nicht bewusst erforderlich.

Mit anderen Worten,

ActiveRecord = Ein Werkzeug, das die DB als eine andere Welt vollständig in die Ruby-Welt integriert.

Dank dieser Abstraktion können Rails-Entwickler, auch wenn sie keine DB-Experten sind, mit nur wenigen Zeilen Ruby den gesamten Datensatz des Dienstes verwalten.


Fazit - ActiveRecord ist kein ORM, sondern ein 'DB-Abstraktion Engine'

Warum ist ActiveRecord ein "echter cooler Typ"?

Der Grund ist einfach.

ActiveRecord lässt den Entwickler alle Unterschiede und Regeln der Komplexität jeder DB vergessen.

Und ermöglicht es, alle Arten von DBs auf dieselbe Weise mit der einzigen Sprache Ruby zu behandeln.

Das ist die Kraft der Abstraktion.

Das ist die Philosophie von Rails.

Das ist die Antwort darauf, warum ActiveRecord ein herausragendes ORM ist.

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

Weiterlesen

Get notified of new posts

We'll email you when Bamchi Blog publishes new content.

Your email will only be used for new post notifications.