Pour le fun, voici quelques statistiques sur Zaptravel, projet sur lequel je travaille depuis mai 2012. La partie web de Zaptravel, le site Web ainsi que la partie API, est un projet Play2/Scala. En ce moment, nous sommes 2 développeurs sur cette partie. Mathieu s’occupe de la partie Front, et je travaille sur le reste. Après 15 mois de travail, sans imaginer qu’il faudrait sans doute nettoyer un peu le code, le projet représente 243 fichiers Scala et 8 fichiers Java. Cela fait un volume d’environ 23500 lignes de Scala (view+model+controller). Au quotidien, je parle aussi avec l’expérience de mes 16 années, je n’ai pas le sentiment d’être perdu dans la quantité de code. La maintenance et les modifications sont plutôt aisées. Scala étant moins verbeux que Java, je peux confirmer que sur ce type de projet Web, il y a déjà un gain de maintenance. J’estime à 30% le gain en terme de quantité de code. C’est autant de code à lire en moins lorsque l’on travaille. C’est aussi plus simple à modifier et à relire.
Les pages Webs (HTML+Scala) représentent environ 9700 lignes (sans les commentaires, les lignes vides, etc). Pour ce qui est de la partie controllers du projet, 4473 lignes de Scala. Pour la partie models, nous n’utilisons que Redis. Pas de SQL donc. Cela représente 6700 lignes de Scala. Je suis adepte du pattern de programmation où mon modèle est aussi orienté service. Ce qui veut dire que l’essentiel du code métier est donc du coté models. En regardant le code, tout ce qui est technique reste dans le package « controllers ». Tout ce qui est lié à Zaptravel, à part la partie Redis, se retrouve dans le package models.
Une compilation complète du projet prend 74 secondes (MacbookPro i7 8 core 2.3Ghz, disque SSD, avec 8Go de ram). Une compilation partielle, effectuée par le framework lorsque je travaille sur certaines parties, prend une à deux secondes. Les compilations complètes sont assez lentes, surtout lorsque je compare cela à mon expérience avec Play! 1 en Java.
Depuis un an, j’ai tout un tas de techniques pour coder plus efficacement. Tout d’abord j’utilise IDEA IntelliJ, parfois Sublime Text 2 . J’ai configuré les 2 outils afin de sauvegarder mes modifications dès que je perds le focus de la fenêtre. Ensuite j’ai installé LiveReload pour recharger la fenêtre de mon navigateur automatiquement. Enfin concernant Play2, je développe avec le mode « triggered execution » de SBT. Pour cela, je lance play, puis une fois que l’invité de SBT est prêt, je démarre mon application avec « ~ run ». Ainsi, dès qu’une modification est sauvegardée, Play2 recompile. Avec tout ceci, je peux coder et avancer rapidement.
0 no like
Comme d’habitude, article toujours très instructif 🙂
Par contre, j’ai un peu de mal à me faire au mélange dans les modèles de la partie « modèle » en elle-même ainsi que la partie accès aux données. Les finders static ne me semblent pas naturels (peut-être à cause de mon usage de Spring et des @Repository, @Service sur des projets pros…).
Du coup j’ai préféré garder cette structure pour garder mes classes de modèle les plus light possible. Je sais pas si c’est vraiment une bonne idée.
Je vois partout sur les blogs l’usage de Play2 avec Scala, mais moins l’usage Play2/Java. Est-ce que ça signifie que Play2/Java est juste fait pour contenter tout le monde et qu’il va tendre à disparaître ou il va vraiment durer ?
@Chafik Je ne sais pas ce qui sera prévu pour Play2 ou Play3. Mon expérience personnelle sur Play2/Java, c’est que je préfère Play1/Java. Par contre, Play2/Scala est définitivement un bon choix, si Scala est un choix pertinent pour votre projet (ou votre produit).
Je n’ai malheureusement aucune notion de Scala donc difficile d’en juger, il va falloir que je lise quelques articles dessus pour voir de plus près. Je vais remonter dans les archives du blog pour voir. Merci.
Toujours appréciable ce retour d’experience.
Bonjour,
J’ai parcouru votre blog suite à une recherche sur un retour d’expérience du framework Play. Pourriez-vous indiquez le temps de compilation (j’ai lu ici et là des temps assez lents pour quelques fichiers). J’ai également télécharger une version et compiler sur mon ordi: la compilation d’un sample de base a pris plus de temps que je pensais 🙁 et l’exécution de la page la première fois était assez lente. Pourriez-vous confirmer ou non suite à votre expérience.
Sur le côté model: comment développez-vous votre métier ? Est ce uniquement des services web ?
Dsl si ces questions semblent basiques… j’ai envie de découvrir ce framework.
Merci.
YM