cCommunORM est le nom d’une classe qui s’inscrit dans un ensemble de classes, qui ensemble forment un ORM.

Né en 2019 ce projet visait à compenser l’absence d’ORM dans le WLangage. Cela nécessitait de longs et fastidieux copier-coller dans des classes pour implémenter des méthodes de get, save, delete…et chaque modification devait être répercutée partout.

Cet ORM entièrement objet et faisant grand usage de l’héritage et du polymorphisme possède plusieurs fonctions:

-il écrit tout seul ses requêtes en utilisant un formatage connu à l’avance du schéma de données (ce qui impose un schéma très propre, mais ce n’est pas l’objet de cette page 🙂 ). Depuis la version 28 de Windev, il utilise directement l’attribut <mapping> pour lier les attributs de classe à la rubrique en base de données.

-il est capable de faire ses JOIN sur les objets liés (ou pas, car c’est débrayable. Ceci est rendu possible par la classe cJoinClauseOrm, qui facilite l’adjonction des JOIN dans les classes de mapping), et également de requêter les tableaux d’objets liés (ou pas aussi, car c’est aussi débrayable)

-il accepte des requêtes customisables, et fournit la classe cWhereClause, qui permet de décrire une clause Where sous forme d’objets. Plus besoin d’écrire soi-même la clause WHERE: utilisez des opérandes directement dans le code et construisez vos clauses, imbriquées ou pas. Cela permet notamment de pouvoir écrire une clause where en JSON et l’envoyer à cette classe qui saura la traduire en SQL

Il fonctionne avec une classe encore plus ancienne (2015!) , cBDD, qui contient l’ensemble des méthodes nécessaires pour ouvrir une base de de données, y faire automatiquement des mises à jour avant/après ouverture, des modifications de structure (pour les bases HFSQL uniquement), des créations de fichiers…

Ces classes me permettent d’être immédiatement opérationnel concernant la base de données, et de ne pas devoir recoder toute la plomberie à chaque fois. Ouvrir une base et s’en servir devient une formalité.

Note importante: cet ORM, comme beaucoup d’autres, travaille en RAM. Et donc, il est extrêmement pratique pour manipuler facilement des jeux de données réduits mais ne sera pas très utile pour des traitements de masse. Traitements qui peuvent de toute façon, souvent être dévolus à la base elle-même.