mardi 29 septembre 2009

Sitebricks : le nouveau framework web de Google

Google lancera bientôt son nouveau framework web : Sitebricks. Ce nouvel outil, construit sur le framework d'injection de dépendances Guice, se veut simple et intuitif, ce qui n'a rien d'étonnant quand on connait la philosophie de Google. Sitebricks propose un système de templates basés sur un mélange de HTML et d'annotations, avec un système de binding vers des beans Java, le tout en s'inspirant du fonctionnement des services Restful!

Petit exemple :
  • On définit une méthode d'accès à une liste de personnes avec les annotation @At et @Get dans un POJO :


@At("/persons")
public class PersonPage {
private List<Person> persons;

@Get
public void get() {
this.persons = personsDao.getPersons();
}
}

  • On accède aux données de ce POJO via le template html :



    @Repeat(items=persons, var="person")
  • ${person.name}



L'annotation @Repeat permet d'itérer sur la collection de personnes pour afficher leur nom, en affichant autant de balises <li> qu'il y a d'éléments.
D'autres annotations sont disponibles, comme @ShowIf qui permet de définir une collection pour afficher ou nom un composant (en fait une balise et son contenu). Pour des besoins spécifiques il sera également possible de développer ses propres annotations, ou "bricks" (un peu comme pour les tag libs JSP).

Dans le sens inverse, pour envoyer des données depuis un formulaire vers un POJO, on utilise une annotation POST :


private Person newPerson;
@Post
public void postPerson() {
personDAO.save(newPerson);
}


Et on "binde" les champs simplement en définissant un nom correspondant aux champs des objets Java :


<input name="newPerson.name" type="text">



L'objet newPerson sera automatiquement rempli avec les valeurs du formulaire html (il faut bien sur définir les getters et setters pour cet objet).

Pour aller plus loin

  • Ajouter des paramètres pour accéder aux ressources

Sitebricks tire parti du style Restful en proposant un moyen plus élaboré de récupérer des ressources:



@At("/persons/town/:town")
public class PersonPage{

@Get
public void get(@Named("town") String town) {
personDao.gePersonstByTown(town);
}

On pourra ainsi récupérer la liste des personnes d'une ville spécifique avec le code suivant dans le template :





    @Repeat(items=persons/town/Paris, var="person")
  • ${person.name}


  • Réutilisation de composants

Sitebricks possède également un mécanisme permettant de faciliter la réutilisation de composants. Un fragment de page ou "brick" peut être annoté comme "imbriquable" dans une autre page en ajoutant l'annotation "@EmbedAs" dans le POJO correspondant au fragement.

Par exemple ce fragment affiche un message :

@EmbedAs"HelloBrick"
public class Hello{
private String message;
...
}


$message


L'insertion se fait alors simplement dans le code html en rappelant le fragment par une annotation du même nom :



...
@HelloBrick(message="coucou")





Si cette introduction vous a mis l'eau à la bouche, vous pouvez suivre le projet sur cette page : http://code.google.com/p/google-sitebricks/
Vous aurez ainsi toutes les informations nécessaires pour mettre en place et configurer le framework.

En conclusion je trouve ce framework assez sympathique, on sent que l'accent a été mis sur la légereté et la simplicité. De plus, l'orientation Restful du framework est une approche qui me parait originale et dans l'air du temps.
Et vous qu'en pensez vous? Sitebricks pourra-t-il s'imposer et remplacer le vieillissant Struts ou encore JSF dans le coeur des développeurs?