Chaque application jamais construite a besoin de quatre opérations : créer, lire, mettre à jour, supprimer. Ces opérations sont si fondamentales que l'acronyme CRUD est devenu un raccourci industriel pour « gestion de données de base ». Et pourtant en 2026, effectuer ces quatre opérations nécessite encore d'apprendre SQL, de configurer un ORM, ou d'enchaîner des appels de méthodes sur un constructeur de requêtes.
FlinDB fait le CRUD différemment. Il n'y a pas de SQL. Il n'y a pas d'ORM. Il n'y a pas de couche de traduction. Vous sauvegardez une entité, et elle est sauvegardée. Vous cherchez une entité, et elle est trouvée.
Voici l'histoire de la session 160 : 37 tests, 380 lignes de Rust, et une expérience développeur qui fait ressembler les opérations de base de données à des affectations de variables.
Créer : Save et c'est parti
flinuser = User { name: "Thales", email: "[email protected]" }
save userLa méthode save gère à la fois la création et les mises à jour. Si l'entité n'a pas d'ID, c'est une nouvelle entité. Si elle en a déjà un, c'est une mise à jour.
Lire : Find, All, Where, First
flinuser = User.find(1) // Find by ID - O(1)
users = User.all // All entities
active_users = User.where(active == true) // Where filter
admin = User.first(role == "admin") // First match
total = User.count // CountChaînage de requêtes
flinresults = Product
.where(category == "electronics")
.where(price < 1000)
.order(rating, desc)
.limit(10)Mettre à jour : modifier et sauvegarder
flinuser = User.find(1)
user.name = "New Name"
save userQuand save est appelé sur une entité existante, l'état courant devient une version historique, la nouvelle devient la version courante, le numéro de version s'incrémente et le updated_at est mis à jour.
Supprimer : douce par défaut
flindelete User.find(1)Toutes les requêtes dans ZeroCore filtrent automatiquement les entités supprimées en douceur. Pour la suppression permanente : destroy user.
L'écart d'expérience développeur
En FLIN :
flin// Create
user = User { name: "Thales", email: "[email protected]" }
save user
// Read
users = User.where(active == true).order(created_at, desc).limit(10)
// Update
user = User.find(1)
user.name = "New Name"
save user
// Delete
delete User.find(1)La version FLIN se lit comme du pseudocode. Il n'y a pas de client à importer. Pas d'async/await à gérer. Pas d'objets de configuration imbriqués. Les opérations sont des verbes dans le langage, pas des méthodes sur une bibliothèque.
C'est le point. Le CRUD n'est pas la partie intéressante du développement d'applications. C'est la plomberie. FlinDB fait disparaître la plomberie pour que les développeurs puissent se concentrer sur les parties de leur application qui comptent vraiment.
Ceci est la partie 3 de la série « How We Built FlinDB ».
Navigation de la série : - [056] FlinDB: Zero-Configuration Embedded Database - [057] Entities, Not Tables - [058] CRUD Without SQL (vous êtes ici) - [059] Constraints and Validation in FlinDB - [060] Aggregations and Analytics