dimanche 8 juin 2008

[Divers] QuickGUI amélioration MVC + Observateur

Nous revenons rapidement sur QuickGUI qui je le rappel est une librairie externe développée pour simplifier la réalisation d'interfaces graphiques en java. Développée en interne elle est la base de XProcessor et se voit aujourd'hui enrichie de 2 nouvelles classes qui donne tout leur sens à 2 classes déjà présentes mais inutilisées jusqu'à présent, à savoir Controler, View sensées permettre de réaliser des application basées sur le pattern MVC (Model View Controler).

Les 2 nouvelles classes sont Observer et Observable, ce qui donne la nouvelle arborescence de QuickGUI:

























Le package "main.support.ui.base" contient tout ce qu'il faut pour développer des application basées sur le patterns MVC.

Mais pourquoi ajouter ces 2 nouvelles classes? Sont elles vraiment utiles?
En effet réaliser un programme basé sur MVC est simple et permet un grande "fiabilité" de codage. Cela est valable tant que l'on ne dispose que d'une seule vue en lien avec un modèle. Dés que l'on possède au moins 2 vues qui sont liées au modèle cela devient plus compliqué. On considère alors l'idée que le modèle puisse être Observé et que les Vues observent le modèle. Lorsque le modèle est modifié il demande une mise à jour des vues qui l'observent pour qu'elles actualisent leur contenu. Voici un schéma de l'idée:











(Source: http://msdn.microsoft.com/en-us/library/ms978748.des_MVC_Fig03(en-us,MSDN.10).gif)

Vue du code source de la classe Observer:
package main.support.ui.base;

public interface Observer{

public void update(Observable o);

}

Vue du code source de la classe Observable:
package main.support.ui.base;

public interface Observable {

public void addObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();

}

Mise en œuvre:
Une vue s'ajoute en tant qu'observer au modèle avec la méthode addObserver(this).
Le modèle implémente Observable et réalise un notifyObservers() quand il est modifié, après cette méthode parcourt tout les Observateur et réalise un update(). C'est tout simple! A vous de voir ce qu'il faut mettre dans la méthode update() de votre vue, un repaint() par exemple.

Actuellement XProcessor n'est pas basé sur le pattern MVC, il se peut qu'avec l'ajout de cette fonctionnalité à QuickGUI, XProcessor puisse subir une profonde modification bientôt.

Aucun commentaire: