samedi 21 janvier 2012

Concepts de base des générateurs MDA


Lors de la création d'un générateur de code, il est intéressant de se poser les bonnes questions pour savoir si le code que l'on souhaite générer va pouvoir l'être intégralement.
Il existe 3 possibilités :
  1. Le concept du modèle fourni suffisamment d'informations pour pouvoir générer le code intégralement. Le code ne nécessite aucune reprise par le développeur. Lors de la modification du modèle, le code sera regénéré et écrase l'intégralité du code existant.
  2. Le concept du modèle fourni des informations pour la génération mais qui ne sont pas complète. Le code est généré en partie et le développeur devra reprendre le code généré pour l'enrichir à du code manuel. Lors de la modification du modèle, seul le code généré est écrasé. Le code manuel, quand à lui, est protégé et reste intact.
  3. Le concept du modèle fournit peu ou pas d'information pour générer le contenu. Le générateur va créer un squelette du fichier que le développeur devra codé manuellement. Lors de la modification du modèle, la regénération n'écrase pas le code.
Le cas 1 est le cas idéal du MDA : je modélise un concept et je génère 100% de la sémantique dans le code.
Le cas 3 est le pire cas. Il peut signifier que le DSL n'offre pas suffisamment de concept pour la génération. Il peut intervenir également lorsque l'on souhaite générer des fichiers trop techniques et dont les informations sont naturellement absente du modèle (qui reste fonctionnel).
Lors d'une regénération du code (suite à une modification du modèle), ces 2 cas ne sont pas problématiques : pour le cas 1, j'écrase l'intégralité du code; pour le cas 2, si le code existe déjà, je ne fais rien !
Le plus problématique, lors d'une regénération est le cas 2 : il faut garder intact les portions de code manuelles et écraser les portions de codes générées.

Pour info, ces cas sont répertoriés principalement sur des générateurs MDA. Il existe d'autres types de générateurs de code qui sont des moteurs de template et qui écrasent toujours le code existant en cas de modification du modèle (voir par exemple JET ou StringTemplate).

Références
le schéma est grandement inspiré de celui de Genuitec.

Aucun commentaire:

Enregistrer un commentaire