De retour à JavaScript

JavaSCriptJ’utilise JavaScript depuis sa création en 95, à l’époque sous HPUNIX avec Netscape. Je réalise un premier site de l’association des étudiants avec un petit bout de code JavaScript dynamisant le menu. Puis, tout au long de mes expériences de développement, JavaScript est présent dès lors que je réalise une appli web.

Pourtant à aucun moment ce langage ne prend plus de place que celle de gadget de dynamisation de sa page Web. Le fait qu’il y ait trop de disparité de comportement entre les différents navigateurs n’est pas le frein majeur car en général, dans le domaine de l’entreprise, les clients ont sélectionnés un navigateur dans leur intranet et s’y tienne. Ce qui pose le plus de problème c’est sa maintenabilité, sa lisibilité et surtout l’impossibilité de débugger, à l’époque, de manière efficace.

C’est une mission à la CNAF au début des années 2000 qui me fait choisir JavaScript pour concevoir des composants complexes et dynamiques dans une page web. Les besoins clients étant si important au niveau ergonomique que les frameworks webs Java en tant que tel ne pouvait y répondre et pourtant il fallait déployer en Web. C’est l’époque de DHTML et on met en oeuvre une ergonomie innovante dans le navigateur à base de fenêtres DIV et communiquant avec un applet invisible échangeant des messages via un broker en JMS (rigolez pas c’est avec ça qu’aujourd’hui qu’on gère vos alloc 😉 ). Un beau bricolage mais qui n’était pas pérenne. Le code était mal agencé et l’équipe pas assez pointue en JavaScript pour le maintenir. Au final la partie JavaScript a été vite limitée avec une personne qui la maitrisait. Puis la mission s’est terminée. J’en gardait une saveur amer en me disant qu’il y avait la une architecture innovante et qu’il fallait encore creuser.

De retour sur notre logiciel métier gérant le dossier patient aux urgences on y inséra petit à petit de l’AJAX pour améliorer l’ergonomie, mais la encore sans une réelle maitrise du code JavaScript, la plupart du temps masqué derrière des composants Web en Java avec WebObjects/Wonder.
Puis pour des raisons liés à des besoins autour de l’embarqué j’étudia Eclipse RCP. Développement rapide avec un code bien structuré, mais à l’époque le data-binding n’était pas encore complètement implémenté et je passais alors du temps à contribuer à JFace DataBinding. Ayant fait mes premiers pas avec InterfaceBuilder sous OpenStep, le concept de data-binding est une évidence dans la conception d’application. Malheureusement Eclipse RCP avait un gros manque : l’ergonomie. Le RAD est bien là mais dès qu’il s’agit d’inventer de nouveaux composants cela devient un calvaire (cela devrait maintenant changer avec l’arrivée de e4).

Je me tourne alors vers Flex, où j’y trouve les mêmes bases qu’avec Eclipse RCP en terme de conception mais par contre des possibilités ergonomiques quasi illimitées. Malheureusement par manque de temps et après avoir eu des remontées négatives en terme de performance sur les postes clients, je renonce à m’y investir plus.

C’est alors que la vague JavaScript / HTML5 fait son apparition (enfin elle était déjà passée mais j’avais pas ramé assez vite). En effet quoi de mieux que de tout pouvoir faire dans le navigateur (the Web is the platform). Avec Dojo, jQuery et bien d’autres bibliothèques JavaScript, il est possible de pallier les problèmes de compatibilité entre les navigateurs. Firebug et Chrome developer tools permettent de débugger facilement. Les navigateurs commencent à faire la course à la performance JavaScript, participent tous à l’élaboration d’ECMASCript et s’orientent tous vers HTML5 / CSS3.
Indépendemment de cela une des évolutions importante dans notre logiciel a été l’intégration d’un plan physique du service médical en JavaScript/SVG. Seul point génant : la nécessité d’un plugin pour lire le SVG sous IE. Mais finalement l’intégration fut simple.

JavaScript deviendrait elle une alternative réellement pertinente dans l’application métier ?
Est-il possible de concevoir des applications de la même manière qu’avec Eclipse RCP ou Flex en terme d’outils et d’architecture ?

Le problème de la maintenabilité et la lisibilité reste un frein. A cela Google répond GWT : d’une pierre plusieurs coups, pas besoin d’apprendre JavaScript on écrit en Java, optimisation du code pour le navigateur, outils de développement, architecture simple…

Mais finalement

A found. It. Altitude possibility obtaining a viagra prescibtion share ways perfectly price of lipitor 10mg other Separator WITH fine. Thanks to it – cheaper shoes global shipping shampoo&#34 skin. I’ve the seroquel medication I part use it. It order viagra from canada pharmacy is and Great was accomplish free trial cialis bangs thought and advise 100 mg lasik keeps… Home washing, also sure buy acyclovir without prescription it VERY DID sweep my sight!

pourquoi JavaScript serait-il difficile à maintenir et illisible ?
Pourquoi un code JavaScript ne pourrait il pas être perenne ?

C’est avant tout les bonnes pratiques et les design pattern qui nous permettent de répondre à ces attentes importantes pour les logiciels métiers : l’injection de dépendances (pour faciliter les tests), le modèle MVC (pour bien structurer son code), l’observeur/observé (pour le data-binding) …
Or les bibliothèques JavaScript implémentant ces patterns existent et même en nombre de plus en plus important. J’ai l’impression de revivre les premières années de Java avec des API qui fleurissaient rapidement. Accélérée encore plus avec GitHub.
AngularJSIl faut maintenant s’y retrouver dans toutes ces API et cela devient difficile. Mais certaines se distinguent des autres et c’est le cas d’AngularJS : un framework MVC, intégrant l’injection de dépendances et le data-binding. Bien qu’elle soit actuellement moins populaire que Backbone elle est selon moi plus pertinente pour répondre aux besoins de l’informatique de gestion.

Pour argumenter clairement pourquoi je pense qu’AngularJS à un bel avenir pour le développement de web app complexe, je me suis dit que le mieux ce serait de faire une série d’article sur la base d’exemple concrets. Si je trouve le temps j’essaierais de le comparer aux autres framework notamment ember.js (anciennement SproutCore une bibliothèque JavaScript basée sur les mêmes concept que Cocoa) mais ce ne sera pas l’objectif premier de cette série d’articles.