10 trucs pour développer avec PureMVC

par Jens Krause [aka sectore]

Décembre 2007

 

 

1.               Pensez (Pure)MVC

 

Par où commencer avec PureMVC ? Facile : Pensez (Pure)MVC !

 

Comme son nom l’indique, PureMVC se base sur le classique meta design pattern Modèle-Vue-Contrôleur. En utilisant le pattern Facade vous n’instanciez pas directement les acteurs principaux mais chaque membre de PureMVC a son propre rôle bien défini :

 

Les Proxies représentent le Modèle

Les Médiateurs et ses composants visuels constituent la Vue

Les Commandes composent le Contrôleur

 

 

2.               Créez une API pour les composants visuels

 

Un composant visuel pourrait être un composant UI standard (ex :une grille de données) ou un composant personnalisé ( ex :un monde propre à un jeu)  ou n’importe quoi d’autre. N’utilisez pas directement ses méthodes publiques. Recourez à une API afin de changer son état ou son comportement.

 

Un des avantages de PureMVC est d’être indépendant des technologies utilisées. Par exemple : j’ai construit une “pure” application Flash basée sur PureMVC sans recourir au framework Flex. La même application pourra être portée sous AIR afin d’utiliser l’intéressante API de gestion de fichiers de AIR. En passant au framework Flex vous remplacerez les composants visuels mais pas les médiateurs ni aucun des autres acteurs de PureMVC.

 

 

3.               Utilisez un seul Médiateur pour plusieurs composants visuels

 

Utilisez un unique médiateur pour coordonner étroitement plusieurs composants visuels.  Toutes les vues n’ont pas besoin d’un médiateur. Par exemple : vous disposez d’une ApplicationControlBar contenant notamment un TextInput et un Bouton. Créez alors un seul médiateur pour votre ApplicationControlBar, nommez-le ApplicationControlBarMediator et référencez ensuite  par énumération les composants qui y sont intégrés.

 

 

4.               Laissez les événements se propager

 

Que faire si vous ne souhaitez pas utiliser plusieurs composants visuels pour un seul médiateur ? Afin de gérer les interactions entre utilisateur avec de multiples composants visuels, laissez les événements se propager depuis les composants visuels sous-jacents.

 

Par exemple : cliquer sur un bouton déclenchera un événement personnalisé qui cheminera à travers le composant visuel qui l’abrite et qui sera finalement entendu par le médiateur. Ce dernier ne sait rien de ce bouton ni de sa hiérarchie à l’intérieur du composant visuel. Seul l’événement qui sen extrait l’intéresse.

 

 

5.               Communiquez par notifications aussi souvent que possible

 

Les notifications sont les événements de PureMVC.

 

Pour communiquer entre les 3 tiers  que sont le modèle, la vue et le contrôleur, recourez le plus souvent possible aux  notifications dans les scénarios suivants :

 

(communication de -> à)

-          Médiateur -> Proxy (via des commandes mappées)

-          Proxy -> Mediateur

-          Proxy ->Commande

-          Commandes -> Mediateur

 

Même s’il est possible de référencer un Proxy depuis un médiateur, ne modifiez pas le Proxy directement depuis un médiateur. Envoyez plutôt une notification avec une commande mappée. C’est une mauvaise pratique de modifier un Proxy (modèle) depuis un médiateur (vue) directement sans recourir à une commande (contrôleur)

 

 

6.               Utilisez les commandes ou macro-commandes aussi souvent que possible

 

Les commandes remplissent les fonctions pour le coté contrôleur: récupérer et interagir avec les Proxies, communiquer avec les médiateurs ou bien exécuter d’autres commandes.

Utilisez les commandes le plus souvent possible; même si la  commande n’est utilisée qu’une seule fois ou ne comporte que deux lignes de code.

 

Afin de (re)exécuter une commande, il vous suffit d’envoyer une notification n’importe où ou n’importe quand dans votre application. Par la suite, il est facile d’enrichir vos commandes à l’aide d’actions plus complexes. Dernier point, et non des moindres, vous savez en permanence quel acteur est responsable du changement du Proxy (modèle).

 

Question : Avez-vous déjà eu à lancer plus d’une commande dans un ordre particulier? Utilisez MacroCommand pour exécuter séquentiellement de multiples SubCommands (chacune étant une SimpleCommand)

 

 

7.               Utilisez Remote Proxy pour envoyer et recevoir des données serveur

 

Pour envoyer et recevoir  des données avec des tierces applications, on utilise des proxies nommés Proxies distants (Remote Proxies). Il ne s’agit pas d’un type particulier de Proxy PureMVC, mais simplement d’une classe basée sur un Proxy organisant et centralisant les appels serveur tels que HTTPServices, RemoteObject etc..

 

Par exemple : Pour appeler un remoteObject coté serveur afin d’identifier un utilisateur, créez un Proxy nommé LoginProxy qui prendra en charge toute la communication avec le serveur, incluant l’envoi et la réception de données, Si, par la suite, vous changez l’implémentation coté serveur pour la phase d’identification, vous n’aurez seulement qu’à modifier LoginProxy.

 

 

8.               Éliminez les Médiateurs inutiles

 

Au cas où un médiateur et ses composants visuels ne sont plus nécessaires, supprimez-les pour une bonne gestion du ramasse miettes (garbage collection).

Utilisez pour cela la méthode facade.removeMediator(MonMediateur.NAME) en conjonction avec la méthode spontanée destroy() qui supprime  le composant visuel, ses écouteurs, timers, références etc.

 

 

9.               La force des VO (Value Objects)

 

Les proxies qui incarnent le modèle abritent les données. Parfait ! Mais les composants visuels (Vue) n’ont pas à connaître la Facade ni le reste de l’application PureMVC. Cela signifie que les composants visuels ne doivent avoir aucun accès direct aux données du modèle.

 

Pour respecter cette contrainte d’abstraction, référencez les données dans les composants visuels en utilisant des « value objects » (ou VO).

 

Ceux-ci ne sont pas des acteurs fondamentaux de l’architecture PureMVC mais sont, en conjonction avec les fonctions de Data Binding de Flex,  un moyen puissant de réagir aux changements des données du modèle tout en respectant les règles.

 

 

10.         Formacieldisponible

 

Cliff Hall a fait un travail remarquable. Les anglophones parmi vous trouveront non seulement d’excellentes documentations tel qu’un “Survol du framework” des  « Meilleures pratiques » et un « Diagramme conceptuel » mais aussi un « formatiel » très utile. Jetez-y un œil !