RMLL - Eclipse Acceleo Day - MDSD Scaffolding and Acceleo - Cédric Vidal - 1.1
Scaffolding MDSD par l’exemple - 1.0
1. Scaffolding MDSD par l’exemple
De la génération de code classique au scaffolding
Cédric Vidal, ProxiAD
Juin 2009
Version 1.0
2. Définition
• Dans le contexte de l’enseignement:
– Le Scaffolding est une stratégie
d’enseignement qui implique d’assister
l’élève novice en limitant la complexité
du contexte et en enlevant progressivement
ces limites au fur et à mesure que l’élève
gagne en connaissance, en compétences
et en assurance dans l’appréhension de
l’entièreté de la compléxité du contexte
(Young, 1993).
• Voyons ce que cela donne
appliqué au MDSD …
3. Application au MDSD
expliquée par l’exemple
• Explication appliquée à • Légende
une architecture 3-Tiers Entity ou DAO
contenant les concepts
suivants Fichier
– Entity
Service
– DAO
Génération
– Service
Référence
Séparation de modèle
• Du code Java est généré Code couleur
à partir de ces concepts Saisi Généré Scaffoldé
4. Génération de code classique
• On modélise l’Entity et le DAO
Modèle • Le code source de l’Entity est
généré à partir de L’Entity
DAO modélisée
Entity • Le code source du DAO est
généré à partir du DAO
modélisé
• Les DAO qui ne sont pas
modélisés n’ont pas de code
Texte source généré
• Problème: Nécessite de
DAO.java
Entity.java modéliser tous les DAO …
• Même ceux qui ne font que du
CRUD
5. Génération avec compensation
• On génère toujours le code
Entity
Modèle source des éléments modélisés
• Pour les Entity qui n’ont pas de
One DAO DAO modélisé, on compense
Entity One cette absence en génèrant le
Two code source CRUD du DAO à
partir de l’Entity
• Avantage: Seuls les DAO
spécifiques sont modélisés
• Problème: Duplication de la
One.java logique de génération des DAO
TwoDAO.java
– Entity -> DAO.java
– DAO -> DAO.java
Two.java
OneDAO.java
Texte
6. Génération Scaffolding « aveugle »
Modèle i Entity • Chaque modèle représente une étape
DAO de la chaîne MDSD
Entity Two
TwoDao • Une étape intermédiaire est ajoutée
One • Chaque modèle ne peut « voir » que
celui qui le précède
Modèle i-bis • Les entités et DAOs existants sont
Entity DAO recopiés tels quels
Two TwoDao • Un DAO est généré pour chaque
Entity entité qui n’en a pas
One DAO
OneDao • Avantage: Une seule logique de
génération DAO
• Problème: Comment référencer des
éléments scaffoldés ? (ici, ‘OneDao’)
Modèle i+1
One.java
TwoDAO.java
Two.java
OneDAO.java
7. Référencer des éléments
scaffoldés: Problématique
Modèle i • Problématique illustrée par
DAO l’introduction d’un service
TwoDao
Entity • Le service ‘Alpha’ peut
Two référencer le DAO modélisé
Entity
One Service ‘TwoDao’ mais pas le DAO
Alpha scaffoldé ‘OneDao’
• Le DAO scaffoldé ‘OneDao’
est situé dans un modèle
que le service ‘Alpha’ ne
peut référencer
Modèle i-bis
Entity DAO • Problème: Il n’est pas
One OneDao possible de référencer des
éléments « scaffoldés »
8. Scaffolding « sur place »
Modèle i • Le DAO ‘OneDao’ est
scaffoldé dans le même
modèle que l’entité ‘One’
Entity DAO Service
One OneDao Alpha • Le DAO est « visible »
sans être matérialisé
dans le modèle source
Modèle i+1 • Avantage: Le service
One.java ‘Alpha’ peut ainsi
référencer le DAO
AlphaService.java scaffoldé ‘OneDao’
OneDao.java • Problème: Comment
customiser un élément
scaffoldé ?
9. Prise de contrôle 1/3: Vue
d’ensemble
Itération n • Il est possible de
prendre le contrôle d’un
Entity DAO Service
One OneDao Alpha élément scaffoldé
• Il est alors matérialisé
dans le modèle source
Itération n+1
• Avantage: Le DAO peut
Entity DAO Service être customisé
One OneDao Alpha
10. Prise de contrôle 2/3: Zoom
DAO Itération n • Après prise de contrôle
OneDao du DAO, les méthodes
Entity create Service CRUD sont toujours
One read Alpha
update scaffoldées
delete
• Avantage: Pas besoin
Itération n+1 DAO de re-saisir les éléments
OneDao
Entity Service
précédemment
create
One read Alpha scaffoldés de zéro
update
delete
11. Prise de contrôle 3/3:
Customisation
Itération n+1 DAO • Ajout d’un finder
OneDao
Entity create Service • Les méthodes CRUD
One read Alpha sont toujours
update
delete scaffoldées
Itération n+2 DAO • Avantage: Seules les
OneDao
customisation sont
create
Entity read Service saisies. Le reste est
One update Alpha scaffoldé
delete
myFinder
13. Conclusion sur le Scaffolding MDSD
• Accélère la saisie du modèle
• Permet d’avoir très vite un modèle « qui fonctionne »
• L’utilisateur commence dès le début avec un modèle
complet
• Fournit un feedback à l’utilisateur plus rapidement
• Permet d’enrichir le modèle d’entrée tout en facilitant
son usage pour l’utilisateur novice
• Le scaffolding peut être utilisé en complément de la
génération de code et de la validation de modèle
• L’utilisateur peut à tout instant prendre le contrôle des
éléments scaffoldés pour les customiser