Archive

Posts Tagged ‘taglibs’

Why this fuss about scriptlets and taglibs ?

juin 11, 2010 1 commentaire

[Cet article est également disponible en Français.]

We all know blog entries and articles like « XYZ is the best » and « how to choose a web framework ».

One thing which often stroke me is the seemingly importance of « good tag lib support » and other scriptlets. Let’s be clear: there can’t be a good tag lib/scriptlet language. Some can be well coded, but still: it’s a broken idea from the start. And saying « putting business logic in the scriptlet is a BAD practice », like the Grails doc does, doesn’t help.

Why such an harsh opinion ?
Well…

Yet another language to learn.
Yes I know, we should all learn one new language every morning. But I would prefer them to add new stuff, new concepts. Here it’s the same all over again, with just syntax changes. Don’t expect any surprise, but bad ones. Like no one knowing how to use the XYZ tag of some library whose documentation has never been seen. Oh, by the way, you can most probably forget javadoc and the like, especially inside the code.

Scriplets and tag lib aren’t object oriented.
Forget about Object Oriented programming. Declaring classes and interfaces is hardly possible, even less used. It’s even worse regarding inheritance. What should it matter ? Well, try cobol and come back, thanks 😉 Seriously, forget design patterns and the like. It’s the land of procedural programming, not OO, so much for all it brings!

Even the best IDE support is… crappy.
Well, one of the best I had to work with was Visual Studio and ASP.Net. What you get there is basically auto completion. Already way better than nothing, but what about all these nice navigations helpers like « show class hierarchy », « show references », « open call hierarchy » and the others ? Furthermore, if you wrote some scriptlet, what about « extract method », renaming and other refactoring tools ? Forget them, you’re doing tag libs and scriplets, stone age is your lot. Not to forget, for sure, that if ever such tools exists, do the tools understand the cross cutting impacts between your backing programming language and the scriplets ? Anayway, despite the age of scriptlets and taglibs, such tools haven’t seen the light up to now…

It’s messy like hell !
Where do you put your scriplets ? In some html page. What’s in there already ? Easy: html tags, texts, css and most probably javascript. And then you should add, on top, your little scriptlets and tags. Splendid! The odds are high the designer won’t be able to get it at all, neither the next developer using it… Such a nice way to communicate your intent in your code, brrr…

Business logic may well sneak into your page.
We all know it’s a bad practice. Business logic should be in some business layer. Without duplication around. Cleanly put and easy to find/change. But, « hey, com’on, I’m just skipping the items whose parents contains the Foo element, we never want them anyway ». And even if you stick to this line, despite willingness to go fast and the danger of inattention, what about the next developer? And how to check that none broke the rule ? Remember this nice « non IDE support » you get ? Well, I guess you’ve to painfully read these nice pieces of code one by one. It sounds quite like some hell punishment… I wish it to none!

In the end, to me, scriplets and tag libs really feel like a false good idea we should thrive to forget. They’re cumbersome to develop, hard to customize (tags) and generalize (scriptlets), messy and a real pain to maintain. Any web framework which features such functionalities makes me shiver. Specific tags or hooks for the backing programming language, yes, for sure. But as soon as « if », « while » and their friends come in, I’m off. And I’m pretty sure we should all be off by then !

++
joseph

Publicités
Étiquettes : , , , ,

Pourquoi cet intérêt pour les scriptlets et autres taglibs ?

juin 11, 2010 1 commentaire

[this article is also available in English.]

Les articles présentant le framework XYZ ou « comment choisir son framework web » abondent.

Une chose me surprend souvent : l’importance apparente accordée aux « bonne tag lib » et autres « super langage de scriplet ». Soyons clair : il ne peut pas y avoir de bonnes tag libs ou de bons scriplets. Certains peuvent être bien codés, mais ça ne change rien: l’idée même est mauvaise dès le départ. Et dire « mettre la logique métier dans les scriplets est une mauvaise pratique », comme le fait la documentation Grails, ne suffit pas à changer la chose.

Pourquoi une opinion aussi tranchée ?
Voyons voir…

Encore un nouveau langage à apprendre.
Oui je sais, nous devrions tous apprendre un nouveau langage de programmation chaque matin. Mais je préfèrerai que de tels langages apportent des nouveautés, tels des concepts inusités. Concernant les scriptlets et autres taglibs, c’est à chaque fois la même chose, seule la syntaxe change. N’en n’attendez pas des découvertes, si ce n’est de mauvaises. Comme par exemple que personne ne sache comment utiliser le tag XYZ de telle bibliothèque dont la documentation n’a jamais été vue. A propos, vous pouvez très certainement oublier aussi la javadoc et les outils similaires…

Scriplets et tag lib ne sont pas orientés objet.
Oubliez la programmation objet. Déclarer des classes et des interfaces est souvent à peine possible, et encore moins utilisé. C’est encore pire concernant l’héritage. Est ce important ? Hum, essayez un peu le cobol et on parle à nouveau ! Plus sérieusement, oubliez les design patterns et assimilé. Vous êtes dans le royaume de la programmation procédurale, pas de l’Orienté Object, et tant pis pour tout ce que cela apporte!

Même le meilleur support par un outil est… boiteux!
L’une des meilleures intégration avec laquelle j’ai travaillé est Visual Studio et ASP.Net. Ce que l’IDE fournit est essentiellement l’auto complétion. C’est déjà bien mieux que rien, mais cela manque tout de même d’aide à la navigation telles que « montrer la hiérarchie », « montrer les références » et autres « ouvrir les appels ». Et puis, quand vous avez écrit votre scriptlet, que deviennent ces « extraire méthode », « renommer » et autres outils de refactoring? Oubliez les aussi, vous faites des taglibs et scriptlets, bienvenu à l’âge de pierre. Bien sûr, tout cela ne doit pas faire oublier que, si jamais de tels outils venaient à apparaitre, qu’en serait il de l’intégration avec le langage utilisé pour tout le reste coté serveur ? De toutes façons, malgré l’ancienneté des scriptlets et autres taglibs, de tels outils n’existent toujours pas…

C’est le bazar !
Où mettez vous vos scriplets ? Au milieu d’html. Il y a quoi là déjà ? Facile : des tags html, du texte, du css et très certainement du javascript. Et vous voudriez ajouter, par dessus le tout, des petits scriplets et encore d’autres tags ? Génial ! Les designers n’y comprendront certainement rien, pas plus que le prochain développeur devant utiliser la chose… Quelle belle façon de communiquer vos intentions dans le code, brrr…

De la logique métier pourrait bien se glisser dans vos pages.
Nous savons tous que c’est une mauvaise pratique. La logique métier devrait être dans une couche métier. Sans duplication. Clairement présentée, facile à trouver et à modifier. Ceci dit, allez, « je n’affiche pas les éléments dont les parents contiennent Foo, on ne les veut jamais de toutes façons! ». Combien même, malgré l’envie d’aller vite et les erreurs d’inattentions, vous vous tiendriez à cette ligne, qu’en est il du prochain développeur ? Comment vérifier que personne ne franchit cette ligne ? Souvenez vous, votre IDE ne vous aidera guère. J’imagine qu’il ne reste plus qu’à lire chacune de ces belles lignes de code, une à une. Ça fait un peu châtiment infernal non ? En tout cas je le souhaite à personne !

Au final, les scriptlets et taglibs me font vraiment l’impression d’une fausse bonne idée que nous devrions nous dépêcher d’oublier. Ils sont difficiles à développer, dur à personnaliser (tags) et à généraliser (scriptlets), illisible et une réelle gageure à maintenir. Perso, tous les frameworks web les supportant me font froid dans le dos. Des tags spécifiques pour se rattacher au côté serveur ? Oui, bien sûr, c’est quasi inévitable de toutes façons. Mais pas plus. Dès que je vois des « if », « while » et le reste, c’en est trop. Et cela devrait être le cas pour tout le monde je pense !

++
joseph

Étiquettes : , , , ,
%d blogueurs aiment cette page :