Table of Contents

TD, version finale de l'application

Vous pouvez télécharger les sources: account_manager.src.zip

Explication sur l'architecture

Voici le schema :

Au demarrage de l'application, la fonction startup() initialise certaines choses:

Ensuite, voici les étapes de fonctionnement (les numéros correspondent aux numéros oranges sur le schema):

  1. l'utilisateur veut modifier le contenu du compte bancaire. Il a à sa disposition deux choix :
    • soit il rempli le formulaire du XBL, et sur le click du bouton “sauver”, le code javascript indiqué dans l'attribut onnewrecord de la balise <recordform/> est executé. Ce code appelle en fait la méthode addRecord du composant bankaccount.
    • soit il veut effacer un enregistrement, il clique alors sur le bouton remove, qui appelle alors la méthode removeRecord du composant bankaccount
  2. dans la méthode addRecord ou removeRecord, le composant bankaccount modifie le document DOM en ajoutant ou enlevant une balise <record>.
  3. bankaccount notifie ensuite l'observer service avec le topic “bankaccount-changed”, pour signaler qu'il y a eu un changement dans les données.
  4. l'observer service contient une liste d'observateur qui ont été ajouté via sa methode addObserver. Lors de la notification de bankaccount, il appelle alors la methode “observe” des observateurs qui ont été enregistré pour le topic “bankaccount-changed”. Dans notre application, il n'y a qu'un observateur, accountObserver.
  5. accountObserver ne fait qu'une chose quand il est appelé par l'observer service : il invoque le template pour que le contenu du template soit regénéré à partir des données du composant bankaccount.

Remarques sur cette architecture

Il y a bien sûr des manières plus simples de développer cette petite application toute bête (comme cela a été fait dans le td du mercredi), mais l'architecture décrite ci-dessus apporte bien plus d'avantages, du fait qu'elle est découpée en “couche”. En effet, ce principe permet de séparer les différents éléments de l'application en fonction de leur nature :

Pourquoi des couches ? Séparer les differents élements permet de forcer plus ou moins à les rendre indépendant des couches superieurs ou inferieurs. Cela permet un couplage (ou une dépendance si vous préférez) moins fort entre ces couches. L'utilisation d'un système de message comme l'observer service permet aussi un découplage fort.

Le découplage permet alors de pouvoir :

En clair, cette architecture qui semble complexe au premier abord, permet en fait de faciliter le développement, tant au niveau de la maintenance (corrections de bugs, on peut repère plus vite là où le bug peut se trover), que des évolutions inévitables que vous ferez (ajout de fonctionnalités) et de l'extensibilité de l'application. Pensez-y dans votre propre application ! ;-)