Il n’y a pas que java …

Pour ceux qui s’intéressent à d’autres technologies, et entre autres aux langages dits dynamiques ou disons plutôt dynamiquement typés, voici un truc qui décoiffe : le framework  PHP « symfony ».

Il y a entre autres un générateur de code qui, à partir d’un méta modèle assez simple à écrire, construit entièrement une application web de type CRUD (Create Research Update Delete).

Voir la démo qui tue (c’est en anglais mais comme c’est un français qui cause, c’est très compréhensible … et le screencast parle de lui même).

Au passage, on peut noter une architecture très propre. Et à ceux qui pensent encore que PHP « ne » permet « que » de faire des scripts web avec des fonctions codées à la visual basic … non, non, on parle bien de framework objet et d’architecture multi-couche : modèle métier, couche de persistance, contrôleurs, vues … rien d’étranger aux (bons) programmeurs Java.

Joie, le style de code est proche de celui de java : fini les classes ‘objet_personne’ et les fonctions ‘get_var_toto’ que l’on trouvait habituellement dans les framework PHP. Ici une classe objet métier Personne s’écrira ‘Personne’ et un accesseur sur la propriété ‘toto’ s’écrira ‘getToto’.

Lorsqu’on regarde de plus près la démo précédente, on peut avoir quelques critiques :

1/ Le site CRUD est en fait généré à partir d’un méta modèle de base de données. Pourquoi pas, mais cela signifie un modèle métier qui ne bénéficiera pas nécessairement de tout le paradigme objet. Par exemple, on n’exprime pas d’héritage dans un modèle relationnel. Notons cependant que le générateur symfony génère bien un modèle Objet à partir du méta modèle de tables.

2/ La couche de persistance ne doit vraissemblablement pas supporter l’héritage. Oui, après enquète (merci Alain !), le framework de mapping utilisé, propel (une solution tierce utilisée par symfony) ne gère pas l’héritage.  Au java-boys qui sourient déjà, je leur rappelerait EJB jusqu’à sa version 2 … ah ah ah

Eh bien, il ne faut pas s’arrêter à cela. Voici une autre démo qui tue.

Ici, la couche de persistence est gérée par doctrine. L’héritage et les relations many-to-many sont correctement prises en charge.

On note également que symfony implémente (vraissemblablement) un conteneur léger (mécanisme dIoC (Inversion of Control) … à la spring dans le monde java) qui permet en une instruction de configuration de remplacer propel par doctrine.

Voila, une petite entrée pour s’ouvrir l’esprit et se dire que décidemment, il y a de belles solutions …

Auteur :  Stéphane Liétard