MDA en pratique

Etude de cas MDA

Je vous propose de partir d'un modèle simplifié de gestion commerciale d'une entreprise comprenant en particulier les classes Commande, Facture, Article, Contact, Adresse, et Utilisateur.

mda project browser - enterprise architectEcran 1 : exemple de paquetages d'un modèle PIM

Ces classes sont réparties dans 4 paquetages différents : Client, Contrat, Catalogue et Sécurité, correspondant chacun à un domaine métier ou technique particulier.
Ils sont eux-mêmes regroupés dans un paquetage parent nommé Modèle par domaine (voir écran 1).

Les classes sont reliées entre-elles par des relations 1 - * ou * - * et sont de type association, agrégation, composition et d'héritage.

Le modèle de classes techniques PSM obtenu après transformation MDA est quant à lui généré dans le paquetage Modèle du système.

Le fichier de l'exemple est téléchargeable en cliquant sur ce lien : exemple-mda.zip

Transformation en classes Java

Les classes d'un modèle doivent être préalablement sélectionnées pour être transformées.
Cette sélection est réalisée directement sur les classes contenues dans un diagramme de classes ou bien par l'intermédiaire du paquetage qui les contient.

Je souhaite dans mon cas transformer en une seule fois toutes les classes que j'ai modélisées.

  1. Je sélectionne pour cela depuis la fenêtre Project Browser, le paquetage Modèle par domaine regroupant toutes les classes évoquées précédemment.
  2. J'ouvre ensuite la fenêtre Model Transformation en cliquant sur le menu Project | Transformations | Transform Current Package... ou en passant par le raccourci clavier Ctrl + Maj + H.
    model transformation window - enterprise architectEcran 2 : fenêtre Model Transformation
  3. Je coche alors la case Include Child Packages pour afficher toutes les classes, y compris celles présentes dans les sous-paquetages,
  4. Je sélectionne Java dans la liste Transformations comme langage cible de la transformation et je renseigne le paquetage Modèle du système comme paquetage cible (Target package à l'écran 2) destinataire des classes transformées.
  5. Je lance enfin la transformation en cliquant sur le bouton Do Tranform.

Sachez qu'il est possible de produire un fichier intermédiaire contenant le code utilisé pour générer le modèle PSM. Son contenu présente un grand intérêt, à la fois pour comprendre la logique de transformation de chaque template mis en jeu, et pour les déboguer une fois personnalisés (voir le paragraphe Les templates de transformation).

Une fois la transformation terminée, la fenêtre Model Transformation se referme et l'on peut constater qu'un paquetage nommé Java Model a été créé sous le paquetage cible Modèle du système, dont j'avais précisé le nom pour le langage Java.

Sous Java Model, l'arborescence complète du paquetage Modèle par domaine a été recréée et les classes Java générées par le processus de transformation .

psm project browser - enterprise architectEcran 3 : exemple de paquetages d'un modèle PSM

Il n'est pas très élégant d'avoir le paquetage Modèle par domaine sous Java Model. Les paquetages de chaque domaine peuvent être créés directement sous Java Model en définissant le paquetage Modèle par domaine comme espace de noms racine (voir la procédure dans la Foire aux Questions EA).

A ce stade, la transformation du modèle métier PIM en modèle de classes Java intermédiaire PSM a consisté dans les grandes lignes à :

  • Créer de nouvelles classes de même nom que les classes d'origine,
  • Transformer les attributs publics de la classe source en attributs privés,
  • Transformer les relations entre classes par des attributs d'accès aux objets liés,
  • Ajouter les accesseurs et mutateurs correspondant à chaque attribut public de la classe source et aux attributs de classe rajoutés à la classe après transformation des relations.
  • Trans-typer les types de données génériques renseignés pour les attributs de classe UML en types de données spécifiques au langage Java.

Les résultats obtenus après transformation sont commentés en détail au chapitre suivant intitulé Résultats obtenus passés au crible.

Génération du code Java

La génération du code Java s'effectue soit de manière globale en sélectionnant le paquetage contenant les classes Java, ou bien de manière unitaire en sélectionnant la classe Java pour laquelle le code est à générer.

Pour l'exemple courant, je retiendrai la première solution afin de générer en une seule fois le code Java de toutes les classes de mon modèle.

Je procède pour cela de la façon suivante :

  1. Je sélectionne le paquetage Java Model depuis la fenêtre Project Browser
  2. J'ouvre la fenêtre Generate Package Source Code en sélectionnant dans le menu général Project | Source Code Engineering | Generate Package Source Code... (le raccourci clavier équivalent est Ctrl + Alt + K),
    generate package source code - enterprise architectEcran 4 : fenêtre Generate Package Source Code
  3. Je coche ensuite la case Include all Child Packages pour sélectionner toutes les classes situées dans les sous-paquetages de Java Model,
  4. Je précise quel est le dossier windows dans lequel sont à créer les fichiers de code source en cochant l'option Auto Generate Files, puis en cliquant sur le bouton ... à droite du champ Root Directory.
  5. Pour terminer, je clique sur le bouton Generate : la fenêtre Batch generation s'ouvre et affiche les actions réalisées pour chaque Classe. La génération est terminée après affichage du message Generation complete!.

Vous pouvez dès à présent constater que EA a créé pour vous, dans le dossier windows renseigné pour la génération, le sous-dossier Modèle par domaine, contenant lui-même 4 sous-dossiers reprenant le nom des packages Catalogue, Client, Contrat et Securite.

Chacun d'eux contient les fichiers d'extension .java de chacune des classes de notre modèle PSM ayant servi de modèle de référence pour la génération du code.

Pour être complet dans cette rubrique, sachez que lors de la génération de code pour une seule classe, en la sélectionnant depuis un diagramme de classe et en sélectionnant Generate Code... dans le menu contextuel (raccourci clavier F11), il est possible de spécifier une liste de classes à importer en renseignant les champs Import(s) / Header(s) de la fenêtre Generate Code. Cette possibilité d'import de classes n'est possible que lors de la génération de code d'une seule classe.

generate code - enterprise architectEcran 5 : fenêtre Generate Code

Il est temps à présent de découvrir plus en détails le résultat obtenu au chapitre suivant Résultats obtenus passés au crible.