Générateur UML2.1 vers Php

Générateur PHP depuis le méta-modèle UML2.

Ce module de génération à pour objectif la production d'une application PHP 5 utilisant le Framework PEAR et le moteur de templates smarty.




Démonstration

Génération d'une application PHP5

Cette démonstration montre comment générer une application PHP 5 à partir d'un modèle UML2.

Utilisation du code généré

Cette démonstration illustre comment utiliser le code généré en implémentant les fonctionnalités suivantes :

  • Création d'un auteur
  • Affichage des auteurs
  • Sélection et suppression de plusieurs auteurs.

Modification du modèle et regénération du code.

Voici la démonstration de la génération incrémentale du module UML2 vers PHP. Cette fonctionnalité est illustré en ajoutant un attribut 'nickName' à la classe 'Author' .

L'architecture cible

Ce module génère une application PHP 5 structurée en couches :

  • DAO ;
  • Objet Métier ;
  • Présentation.

La couche DAO avec le framework PEAR DB

La couche d'accès aux données est composée de classes permettant le dialogue avec une base de données. Tous les SGBD supportés par le framework PEAR sont compatibles avec l'applicaton générée. Une classe DAO est créée pour chaque classe métier du modèle.

Le module de génération gère :

  • l'héritage (une table par classe) ;
  • les associations (1-1, 1-*, *-*) ;
  • les énumérations (script de création et de remplissage de la table) ;
  • recherche par identifiant technique et recherche de tous les objets d'un type donné ;
  • insertion avec mise à jour des relations en cascade ;
  • mise à jour avec mise à jour des relations en cascade ;
  • suppression.

Les objets métiers

Les objets métiers sont de simples classes possédant des attributs et les accesseurs/modificateurs correspondant. Afin de faciliter le développement de l'application des classes proxies gérant le chargement tardif (lazy loading) des associations sont générées. Ce mécanisme est masqué à l'aide du Pattern Factory. Chaque classe métier a une classe Factory correspondante. Il est nécessaire d'utiliser les classes Factory pour profiter du chargement tardif des relations.



Note : Le chargement tardif et la mise à jour en cascade peut poser problème. Si vous sauvegardez un objet métier en ayant modifié une de ces associations, les autres références de cet objet ou les références inverse à l'association pour lesquelles la relation à déjà été chargée ne sont pas mise à jour (ce qui est tout à fait normal).




La couche Présentation avec SMARTY et le modèle MVC2

La couche Présentation de l'application générée présente les caractéristiques suivantes :

  • chaque classe écran donne lieu à la génération d'un fichier de template SMARTY ;
  • chaque classe métier donne lieu à la génération d'un fichier de template SMARTY permettant d'afficher et de sélectionner une liste d'objet métier ;
  • chaque classe écran donne lieu à la génération d'une classe de type Contrôleur. Ces classes possèdent le modèle, choisissent la vue à afficher et renseigne les valeurs du modèle. Les Contrôleurs exécutent les actions ;
  • Un fichier d'index est généré. Il sert de contrôleur principal, c'est le point d'entrée de toutes les requêtes faites par l'utilisateur.










Fonctionnement et utilisation du module.

Modélisation UML

Le générateur permet l'exploitation de modèle UML 2.1 enrichi d'un certain nombre de stéréotypes.

Vous pouvez utiliser différents modeleurs de manière conjointe à ce générateur : Topcased, Papyrus ou encore le projet UML2 Tools de la fondation Eclipse.


Le modèle source

Le module de génération utilise les classes du modèle en entrée.

Nous identifions deux types de classes :

  • Les classes métiers, stéréotypés Entity, permettent la génération de la partie métier de l'application (DAO, Objet métier) ;
  • Les classes écrans, stéréotypés Screen, permettent la génération de la partie présentation de l'application (Template, Contrôleur).

Artefacts générés à partir d'une classe métier (stéréotype Entity).

  • une partie du script de création de la base de données ;
  • une classe DAO (répertoire dao) ;
  • une classe Entity (répertoire entity)  ;
  • une classe EntityProxy prenant en charge le chargement tardif des relations (répertoire entity/proxy) ;
  • une classe EntityFactory permettant de créer des instances d'Entity (répertoire entity) ;
  • un template SMARTY permettant d'afficher l'objet métier (répertoire navigation/view)  ;
  • .

Artfecats générés à partir d'une classe écran (stéréotype Screen).

  • une partie du fichier d'index ;
  • une classe Contrôleur (répertoire navigation/controler) ;
  • un template SMARTY de l'écran (répertoire navigation/view).

Autres artfecats générés.

  • un fichier exécutant tous les imports nécessaires ;
  • une classe de configuration ;
  • un fichier permettant de créer les séquences de la base de données ;
  • une interface IEntity ;
  • une classe abstraite Entity.

Planning

Statut du module
Couche DAO

90%

Objet Métier

95%

Présentation - Contrôleur

60%

Présentation - Templates SMARTY & CSS

50%

Autres (Journalisation, ...)

60%

Couche Services

0%

Installation

L'installation est détaillée sur la page d'installation des modules . L'application générée nécessite le Framework PEAR et le moteur de templates SMARTY.

Démarrage rapide

Une fois le module installé vous pouvez rapidement tester son bon fonctionnement. Créez un nouveau projet (projet vide ou projet PHP si votre installation d'Eclipse dispose de PDT ou PHPEclipse).

Choisissez le menu File puis New et Other....

Dans la rubrique Acceleo choisissez Module Launcher.

La liste des modules installés est alors disponible. Choissisez le module "UML2 to Php" puis cliquez sur suivant. Remplissez alors les différents champs demandés par l'assistant.

Une fois l'assistant terminé, ce dernier crée un fichier .chain qui permet de lancer la génération et initialise un modèle Ecore d'exemple.

Un simple clic droit sur le fichier .chain suivi de Launch lancera la génération, vous retrouverez les fichiers générés dans les répertoires de sorties que vous avez choisi dans l'assistant.

Contribuez !

Si vous souhaitez modifier ou compléter les templates de génération, un fichier Team Project Set est à votre disposition, il permet d'importer les sources du module directement depuis le SVN.

Fichier Team Project Set pour le module PHP

La page modification des sources d'un module explique comment utiliser ce fichier.

Webdesign : www.katrinet.com - Réalisation : Obeo