ORM PHP

Trois générations d’ORM, écrites sur vingt ans. Ce n’est pas de l’entêtement : chacune répond à une limite que la précédente avait rendue visible. C’est le fil rouge de mon travail de développement.

Pourquoi écrire son ORM

Un ORM traduit des tables en objets. La question intéressante n’est pas la traduction : c’est ce que le modèle sait de lui-même. Un modèle qui connaît le type, la cardinalité et les contraintes de chaque champ peut refuser une écriture invalide avant qu’elle n’atteigne la base — et surtout, il se relit dix ans plus tard.

C’est ce qui rend une reprise de données supportable. La plupart des reprises que j’ai faites achoppent sur la même chose : personne ne sait plus ce que contient une colonne, ni pourquoi elle accepte des valeurs vides.

L'administration générée par worm depuis le schéma
L’administration de worm, entièrement générée depuis le modèle : ici la table des champs du schéma lui-même. Rien n’est écrit à la main — c’est ce que permet un modèle qui se décrit complètement.

v1 — datamodel

L’ORM du framework FAD. Typage fort dès l’origine, à une époque où il fallait tout construire soi-même. Il a porté des applications marchandes réelles, dont la boutique de réservation d’Opium Racing.

fad-framework-phpFramework with strongly typed ORM written in PHP.

v2 — db_object

L’ORM de Tiny Framework. La leçon de la v1 : la richesse du modèle coûte cher à écrire. La v2 fait l’inverse — le minimum pour aller vite, quitte à en déclarer moins. Une version améliorée en a été développée pour MatNat, où le catalogue et les commandes ne tenaient plus dans le modèle d’origine.

framework-tiny-php.

v3 — worm

La génération actuelle, en cours. Elle reprend le typage fort de la v1 sans son coût d’écriture : le modèle se déclare une fois et sert à la fois de schéma, de validation et de documentation. C’est le sujet qui m’occupe le plus aujourd’hui.

wormWORM, Web ORM written in PHP.

Et les ORM des autres

Je travaille aussi avec Doctrine, sous Symfony, chez les clients dont la pile est déjà posée — et j’ai écrit un outil de correspondance entre un schéma GraphQL distant et un modèle Doctrine local, pour connecter l’ERP Digiforma. Écrire le sien n’est pas une religion : c’est ce qu’on fait quand rien ne répond au besoin.

La vue d’ensemble est sur Développements ; ce que ça donne en prestation, sur Développement sur mesure.