Une approche pragmatique de la génération de code : le "scaffolding" à base de "modèle léger"

Présentation, services, persistance... Le framework Telosys couvre toutes les couches d'une application Web. Bien que global, il reste cependant modulaire, et ses briques peuvent être utilisées séparément.

Java est devenu le langage de référence pour la plupart des projets d'entreprise, il sera
probablement à ce début de siècle ce que Cobol a été au siècle précédent. Si cette généralisation amène une certaine forme de standardisation (au moins au niveau du langage), il faut reconnaitre que les environnements technologiques qui gravitent autour de Java sont encore très mouvants. Ils subissent des effets de mode, les frameworks se succèdent, les jar se multiplient, les outils s'accumulent, etc. A tel point que l'on peut se demander si l'inertie induite par ces environnements complexes est compatible avec des projets à cycle court nécessitant un démarrage rapide.
La génération de code et notamment le principe de "scaffolding" peuvent être une réponse à cette problématique de vélocité, mais chaque approche présente des contraintes…

Le "Model Driven Developpement" (MDD)
Cette approche, comme son nom l'indique, repose sur un modèle (UML, DSL, etc.) qui contient toutes les informations utilisées par le générateur pour produire le code applicatif. Il s'agit d'une démarche de type "Model First", ce qui suppose une phase initiale consacrée à l'élaboration d'un modèle qui doit être fiable, précis et complet. Ce principe fonctionne parfaitement tant que le processus est respecté, c'est-à-dire tant que le modèle est effectivement utilisé comme référence pour les développements.
Cependant la phase initiale de conception du modèle représente un investissement important, à la fois en charge de travail et en délai. Cette charge initiale rend cette approche généralement incompatible avec un démarrage rapide de projet.

Le "scaffolding"
Popularisé par Ruby On Rails et d'autres environnements du même type, ce principe permet en très peu de temps de générer le code initial de composants immédiatement opérationnels que les développeurs n'auront plus qu'à reprendre et adapter aux spécificités du projet. Il s'agit généralement de générer les écrans de mise à jour des tables d'une base de données existante.
Le principe est simple : l'outil se connecte à la base de données, récupère la structure des tables et les utilise comme source d'information pour générer le code initial de l'application. Si cette approche est simple et efficace, en revanche elle ne permet pas d'intervenir sur les choix de l'outil qui ne travaille qu'avec le peu d'informations dont il dispose.

L'approche Telosys : framework global et générateurs de code

L'objectif du projet Telosys est de fournir un environnement simple et léger, basé sur des
technologies Java standards. Pour ce faire, le projet propose à la fois un framework et des outils de développements fournis sous forme de plugins pour Eclipse.
L'originalité du framework est sa capacité à couvrir toutes les couches d'une application Web (présentation, services, persistance, etc.), il s'agit d'un framework global (ou "full-stack framework") packagé dans un seul fichier jar. Bien que global, il reste cependant modulaire et ses briques peuvent être utilisées séparément.
Les outils de génération de code viennent compléter ce framework. Ils reposent sur une utilisation combinée des approches "Model Driven" et "Scaffolding". Initialement conçus pour accélérer les développements basés sur le framework Telosys, les outils sont en fait utilisables pour d'autres cibles. Ils permettent par exemple des générer du code pour Flex (MXML et ActionScript), JPA, Struts, etc.

Le processus de génération se décompose en trois étapes :

1 – Initialisation du modèle
L'outil se connecte à la base de données et récupère sa structure (tables, clés primaires, clés
étrangères...) afin de créer un "modèle léger", c'est-à-dire un simple fichier XML qui sera stocké dans le workspace du projet.

2 – Raffinage et enrichissement du modèle
Un éditeur spécialisé permet de modifier et d'enrichir le "modèle léger" (noms des classes, types des champs, règles de validation, relations inter-entités, etc.)


3 – Génération du code initial de l'application
Enfin, les informations du modèle sont utilisées par un "moteur de templating" (en l'occurrence
Velocity) pour générer les différents artéfacts souhaités (classes Java, JSP, JavaScript, etc.)
Chaque "cible" est générée par un "template" qui peut être adapté en fonction du projet (règles de codage...). Les cibles de génération sont extensibles, il suffit de créer de nouveaux templates et de les ajouter dans l'outil.
Cette approche à la fois simple et légère met la génération de code à la portée de tous. Il suffit de quelques minutes pour commencer à générer du code sans sortir d'Eclipse.


Pour plus d'informations :

Telosys à Devoxx 2011 : http://t.co/d3HUb1Z
(slides : http://www.slideshare.net/telosys/devoxx-2011-scaffolding-with-telosys )

Telosys au MDDAY 2011 : http://www.mdday.fr/
(slides :http://www.slideshare.net/telosys/mdday-2011telosysv10 )