Skip navigation

Des modèles comme s’il en pleuvait.

J’ai modélisé les concepts de doctrine et j’ai créé une instance pour le transformer en code.

Cela passe par:

  1. modéliser le méta-modèle
  2. créer une instance du méta-modèle
  3. écrire les templates appropriés

Voici un morceau du méta-modèle

root-doctrine-metamodel

Et en voici un autre (au niveau du concept Doctrine_Record réifié en « Class ») :

doctrine-class-connections-in-metamodel1

Et on peut maintenant créer de jolies modèles-instances du méta-modèle :

a-doctrine-schema-modeled

Après l’écriture des templates, on peut générer du code à partir de ce modèle. Et voilà le résultat depuis l’aperçu temps-réel d’Acceleo :

generated-content-from-a-doctrine-model

Elle est pas belle la vie ?

Je suis à peine en train d’écrire les templates, mais le méta-modèle est plutôt complet vis-à-vis de Doctrine.

doctrine-meta-model-features

Ce qui est super fun, c’est que j’ai réalisé le méta-modèle de Php5 déjà, et devinez, Doctrine repose sur ce language.
Autrement dit, je n’ai qu’à faire étendre le language php5 par le language doctrine.
Ainsi depuis un modèle Doctrine, je pourrai aussi parler php, et c’est normal !

Donc dans la classe « Class », il y aura aussi Property et Method (définis dans php5).

Aussi on peut le revoir entièrement et dire que le doctrine::relation étend php5::property par exemple, on peut ainsi ré-utilise les templates php5 !

J’ai trop envie de tester, alors c’est partie !

La seule modification faite ici est donc de définir le fait que doctrine::Class étend php5::Class :

Class

Just add an extension from doctrine::Class to php5::Class

Comparez avec la première image de ce post.

Une fois le méta-modèle enregistré, on peut créer des opérations dans une classe doctrine, quoi de plus naturel ?
Ce qu’il reste à préciser, c’est qu’on a le contrôle sur ou cela sera générer.
Par exemple, dans le cadre d’une utilisation avec Symfony, les méthodes pourront être générés dans lib/ plutôt que dans *Table.

Et voici maintenant une instance possible :

doctrine-metamodel-instance-example

On peut y voir que notre doctrine::Class est maintenant définie comme une php5::Class🙂

A bientôt !

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :