jeudi 28 janvier 2010

Compte rendu du coding dojo Play! framework à l'Alpes JUG

L'Alpes JUG organisait hier en collaboration avec le CARA un coding dojo sur le thème de Play! framework. Play! est un framework de développement agile permettant de créer des applications web avec un minimum de code et un minimum d'efforts.
Guillaume Bort, le leader technique du projet nous a montré comment réaliser une application de gestion de contacts (équivalente à l'application Wicket zencontact de Zenika) à partir d'une maquette html/css statique. En développant l'application il nous a présenté les concepts du framework, de la partie IHM à l'accès à la base de données.

J'ai été assez impressionné par Play!, qui propose une manière très simple d'effectuer des reqûetes JPA, la validation des entités par annotations, un générateur de CRUD, l'héritage de templates HTML, des outils de tests intégrés... Le tout avec une vision très RESTful donc très orientée ressources, notamment dans la définition d'URL propres et explicites pour accéder aux entités. Play! propose en fait le même genre de fonctionnalités que Grails, mais se base sur le langage Java contrairement à Grails qui demande l'apprentissage du langage Groovy. D'ailleurs comme avec Groovy, on n'est pas obligé de créer les getters et setters sur les entités, ils sont générés automatiquement par le framework à la compilation. On retrouve également des petites choses sympathiques telles que le redéploiement à chaud (pas de serveur à redémarrer si on modifie le code) ou la remontée d'erreur de templating html au moment de la compilation. Tout est pensé pour simplifier la vie du développeur et pour le rendre plus agile.

Au cours de la présentation, de nombreuses questions ont été posées et un débat intéressant est ressorti sur la nécessité ou non d'avoir une couche "service" dans l'application.
La position de Guillaume Bort sur ce sujet est claire : la couche service n'a pas lieu d'être dans ce genre d'architecture. Au lieu d'avoir des objets qui contiennent uniquement des champs et des getters/setters (couche modèle anémique), Play! incite le développeur à mettre un maximum de traitements métier dans les objets du modèle, ce qui correspond à une vision plus objet que l'utilisation d'une couche service qui se retrouve finalement assez "procédurale". Les objets du modèle dans Play! héritent d'un ensemble de fonctions qui leur permet d'interagir directement avec la base de données.
Cette vision se rapproche de celle du Domain Driven Design promue par Eric Evans. Elle est à opposer à la vision du monde JEE et des EJB qui propose une couche supplémentaire pour les traitements et l'accès à la base de données. Je suis d'accord sur le fond avec la vision DDD, cependant le mode "couche service" a selon moi encore du sens pour certaines architecture réparties dans lesquelles différents clients distants accèdent à un ensemble de services métiers communs. Mais là je m'éloigne du sujet! Nous en reparlerons surement après l'intervention d'Antonio Goncalves à l'Alpes JUG ;)

Pour conclure, si Play! framework vous intéresse je vous conseille de suivre l'excellent tutoriel du site ou sa traduction disponible sur developpez.com, qui explique comment développer un moteur de blog à l'aide de Play!.