Tuesday, October 30, 2007

Designers vs. Developers, Declaration vs. Procedure

Silence messieurs ! Gavin a parlé !
Voilou, dans son blog, Gavin King (le créateur d'Hibernate, architecte principal de JSF, membre du comité à l'origine de JPA, Seam, etc.) a posté pour parler de l'un des aspects les plus anciens et les plus problématiques du développement web en général et Java en particulier: la couche présentation.

Le problème principal est le suivant: qui devrait réaliser cette couche ?

  • Les designers ? impossible, à moins de les apprendre à travailler avec la technologie utilisée (JSP/Java, PHP, etc.)
  • Les programmeurs ? Oh ... et obtenir un résultat moche !
  • Les hybrides (programmeurs/designers) ? Difficile de manier à la fois l'art de la progrmmation et l'art du web design ...
  • Les deux ? C'est la pire des possibilités à mon avis ... et ça nécessite que chaque partie connaisse les ficelles des autres ... sinon, on risque de casser le design avec des bouts de code mal placés ou de casser le code avec des bouts de html mal placés ...
Bref, JSF présente une solution plus ou moins viable à ce problème: les vues peuvent être totalement abstraites (on touche pas au html) avec une description déclarative de la page, du genre:

<h:selectOneMenu value="#{pas important pour le moment}">
<f:selectItem itemLabel="label" itemValue= "valeur"/>
:
:
</h:selectOneMenu>

On n'exprime que son besoin, c'est à dire un menu qui permet de sélectionner un seul élément.
Une telle page (ne contenant que ce genre de déclaration) peut parfaitement être réalisé par un développeur. Après, si on veut rendre la chose plus zolie, on n'a qu'à ajouter quelques attributs dans les composants JSF pour faire le lien avec des styles CSS. C'est alors aux designers de préparer les styles, et hop !

C'est d'ailleurs la bonne architecture, même pour une page html: la page ne doit contenir que le contenu (sémantique) tandis que la mise en forme va dans les CSS.

Bref, j'explique comme une patate. Jetez plutôt un coup d'oeil sur ce qu'en dit Gavin.

No comments: