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
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 s’en 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
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.
“Formaciel” disponible
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 !