ActiveRecord est une vraie raison géniale

ActiveRecord abstrait la base de données pour permettre de manipuler n'importe quelle base de données. Découvrez la puissance et la valeur de l'abstraction.

bamchi 437

ActiveRecord est vraiment cool - parce qu'il 'abstrait' la base de données, nous pouvons manipuler n'importe quelle base de données.

Le problème le plus difficile en programmation est de traiter des systèmes différents de manière cohérente.

Les bases de données en particulier.

  • MySQL a cette syntaxe

  • PostgreSQL a cette syntaxe

  • SQLite est différent

  • Oracle est un monde à part

Pour les manipuler tous directement, les développeurs doivent se rappeler à chaque fois de la syntaxe de la base de données, du dialecte SQL, des caractéristiques d'indexation, du système de types, du traitement des transactions, etc.

Cependant, Rails a résolu tous ces problèmes avec une seule couche appelée ActiveRecord.

C'est exactement ce qu'est l'abstraction.


Qu'est-ce que l'abstraction? (Concept en soi, sans métaphore)

L'essence de l'abstraction est simple.

Unifier un système complexe avec une seule interface commune (API).

En d'autres termes, même si les modes de fonctionnement sont divers, les méthodes d'utilisation sont unifiées.

L'abstraction est l'une des techniques les plus puissantes dans le monde de l'ingénierie.


Qu'a abstrait ActiveRecord?

Il y a une seule réponse.

Il a unifié les syntaxes SQL et les opérations spécifiques à chaque base de données en manipulant des objets Ruby.

En d'autres termes,

Il a transformé les "différents mondes de chaque base de données" en "un seul monde de code Ruby".


À quel point est-ce puissant? Prouvons-le par un exemple.

Par exemple, disons que nous voulons obtenir une liste d'utilisateurs.

Si nous utilisons directement SQL:

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;

Les syntaxes sont toutes différentes.
LIMIT est différent, les règles de requête sont différentes, les mots réservés sont différents.

Mais avec ActiveRecord?

Rails

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

C'est tout.

ActiveRecord, basé sur ce seul code Ruby, convertit automatiquement en SQL adapté à chaque base de données.

  • Pour MySQL, c'est du SQL personnalisé pour MySQL

  • Pour PostgreSQL, c'est du SQL personnalisé pour PostgreSQL

  • Pour SQLite, c'est du SQL personnalisé pour SQLite

En d'autres termes, les développeurs n'ont besoin de connaître que Ruby.


La valeur réelle fournie par l'abstraction

Les avantages qu'ActiveRecord tire de l'abstraction sont les suivants.


1) Le remplacement de la base de données est libre

Disons que nous passons de SQLite à PostgreSQL.

Normalement:

  • Modifier toutes les requêtes SQL

  • Modifier tous les types

  • Modifier tous les traitements de transaction

  • Modifier toutes les syntaxes LIMIT/OFFSET

Mais avec Rails...
Il n'y a rien à changer.

Il suffit de changer l'adaptateur dans la configuration Rails.

adapter: postgresql

Le code reste le même:

User.where(active: true)

Et ça fonctionne correctement.


2) Vous pouvez développer sans connaître la base de données

ActiveRecord gère automatiquement:

  • Enregistrement de données

  • Modification

  • Requête

  • Suppression

  • Transaction

  • Configuration de la relation

  • Traitement des clés étrangères

  • Optimisation des JOINTURES

Les développeurs n'ont qu'à faire ceci.

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

Mais en réalité, en interne de la base de données,
des requêtes SQL complexes sont exécutées automatiquement:

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

Les développeurs n'ont pas besoin de le savoir.


3) Permet une pensée centrée sur le modèle (Model-driven Thinking)

Le SQL est une pensée centrée sur les données.
Mais Rails est une pensée centrée sur les objets.

En d'autres termes, nous traitons le modèle Utilisateur comme un véritable objet.

user.posts

Cette seule ligne gère tout:
JOINTURE, WHERE, INDEX, interprétation de la relation...
Tout est géré.

Grâce à ActiveRecord,
les développeurs peuvent se concentrer sur la conception de la logique métier.


Lorsque vous comprenez l'abstraction, vous réalisez à quel point ActiveRecord est génial

Regardons le code Ruby suivant.

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

Lorsque ce code est exécuté, en interne:

  1. Il examine la structure du modèle

  2. Vérifie le type de base de données

  3. Échappe en toute sécurité les conditions WHERE

  4. Applique l'ordre de tri

  5. Convertit en syntaxe SQL comprise par la base de données

  6. Exécute le SQL

  7. Convertit les valeurs renvoyées en objets Ruby (User)

Tout ce processus ne nécessite aucune conscience du développeur.

En d'autres termes,

ActiveRecord = un outil qui transforme complètement le monde des bases de données en un monde Ruby pour les développeurs.

Grâce à cette abstraction,
les développeurs Rails peuvent manipuler l'ensemble des données du service
avec seulement quelques lignes de Ruby,
sans avoir besoin d'être des experts en bases de données.


Conclusion - ActiveRecord n'est pas un ORM, mais un 'moteur d'abstraction de base de données'

Pourquoi ActiveRecord est-il un "type vraiment cool"?

Il y a une seule raison.

ActiveRecord permet aux développeurs d'oublier toute la complexité et les règles différentes de chaque base de données.
Et permet de manipuler tous les types de bases de données de la même manière avec un seul langage, Ruby.

C'est le pouvoir de l'abstraction.
C'est la philosophie de Rails.
C'est la réponse à pourquoi ActiveRecord est un ORM de premier ordre.

Comments

Add Comment

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

Continuer la lecture

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.