• › Connexion
  • Blog RIA.do.be
  • Blog Web2Entreprise
Section separator

Catégories

  • Annonces
  • Évènements
  • Concepts et Usages
  • Général
  • Notes Techniques
  • Références
Adobe EMEA Silver Solution Partner Section separator

Abonnement

  • RSS Articles Articles (RSS)
  • RSS Articles Commentaires (RSS)
  • RSS mail Articles (Email)
  • Populaires
  • Récents
  • Commentaires
  • Premiers Retours sur l’Adobe MAX 2009 (vu 13 004 fois)
  • Comment forcer les styles des composants Flex/AS3 d’une librairie SWC réutilisable (vu 5 761 fois)
  • Utiliser le framework Cairngorm pour Flex 2 (1/4) (vu 5 426 fois)
  • Architecture MVC: Cairngorm ou PureMVC ? (vu 3 254 fois)
  • Le problème du ModelLocator Cairngorm (vu 3 062 fois)
Articles récents
  • Ouverture des inscriptions pour le webinar ConfluenceFx
  • Développeur, Communicant, Designer ou Ergonome ? Changez pour Kap IT
  • Application AIR : Comment Sauvegarder/Charger un Document et lui Associer une Extension ?
  • Détection de l’Événement « Coller » avec Flex Builder 3 et Flash Player 9
  • Premiers Retours sur l’Adobe MAX 2009
Commentaires récents
  • Fadi Mansour dans Détection de l’Événement « Coller » avec Flex Builder 3 et Flash Player 9
  • nico dans Détection de l’Événement « Coller » avec Flex Builder 3 et Flash Player 9
  • Florian dans Application AIR : Comment Sauvegarder/Charger un Document et lui Associer une Extension ?
  • Fadi Mansour dans Comment intégrer une application Flex dans une application Flash ou AS3
  • yoann dans Comment intégrer une application Flex dans une application Flash ou AS3

Auteurs

  • Alexis Kartmann (12)
  • Benoit Kogut-Kubiak (2)
  • Christoher Bograt (1)
  • Cyril Daloz (7)
  • Daniel Pesic (5)
  • Fadi Mansour (3)
  • Florian Fesseler (1)
  • Guillaume Mignard (2)
  • Jean de Laulanié (2)
  • Julien Revel (19)
  • Mahmoud Ramadan (1)
  • Matthieu Jobert (1)
  • Stéphane Guyot (1)
  • Stéphane Koëth (2)
  • Yann Graufogel (2)
Section separator

Tags

Kap IT Cairngorm kapinspect Kap Lab Framework builder actionscript RIA BlazeDS JVM MVC LCDS PureMVC fds compilation livecycle Corporate Adobe MAX RTMP Flex AMF AIR Web 2.0 skin AS3
Section separator

Archives

  • février 2010 (1)
  • décembre 2009 (2)
  • novembre 2009 (1)
  • octobre 2009 (3)
  • septembre 2009 (1)
  • août 2009 (1)
  • avril 2009 (2)
  • février 2009 (2)
  • janvier 2009 (4)
  • décembre 2008 (4)
  • novembre 2008 (2)
  • octobre 2008 (2)
  • septembre 2008 (2)
  • août 2008 (1)
  • juin 2008 (1)
  • avril 2008 (4)
  • mars 2008 (3)
  • février 2008 (2)
  • janvier 2008 (1)
  • décembre 2007 (3)
  • novembre 2007 (1)
  • septembre 2007 (1)
  • juillet 2007 (1)
  • juin 2007 (1)
  • mai 2007 (4)
  • avril 2007 (8)
  • mars 2007 (2)
  • février 2007 (1)

Marque-pages

  • Adobe Labs
  • AStrois Blog
  • Code moi un mouton
  • Coma Informatique
Section separator

Kap IT

  • Site Web
  • Blog Web2Entreprise
  • Blog RIA.do.be
  • Lab

Blog RIA.do.be

Veille, Recherche et Développement RIA Flex-AS3-LiveCycle

Architecture MVC: Cairngorm ou PureMVC ?

Par Julien RevelgravatarFermerAuteur : Julien Revel Email : julien.revel@kapit.fr
Site : http://www.kapit.fr
A propos : Voir les autres billets de l'auteur (19)
, publié le 18 septembre 2007

J’ai redécouvert récemment PureMVC qui est sorti officiellement cet été et qui est déjà en version 1.6. C’est carrément top ! Rendez vous sur le site (pureMVC.org).

Pour ceux qui ne connaissent pas encore PureMVC, il s’agit - comme son nom l’indique - d’un framework MVC, et je dirais même que c’est un “pur framework”.

Je l’ai utilisé pour porter une (petite) appli Cairngorm en cours de développement. Ca m’aura pris un week-end, et au final j’ai un code dont je suis bien plus satisfait qu’avant, avec une architecture que je trouve mieux structurée et plus puissante.

J’avais parlé d’une simplification de Cairngorm, mais en fait comme je ne suis pas pleinement satisfait du résultat, je ne l’ai pas publié.

J’en arrive d’ailleurs à penser qu’il vaut parfois mieux changer de framework que d’essayer de “simplifier” ou de “patcher” notre cher “vieux” Cairngorm, qui nous aura rendu bien des services, et nous en rendra encore certainement.

Petite mise à jour: nous venons de publier des outils d’aide au développement des applications MVC, pour Cairngorm et pour PureMVC. Ces consoles interactives pourront vous aider à mieux comprendre ce qui se passe au niveau du framework, n’hésitez donc pas à les télécharger (c’est gratuit) et à les utiliser:

  • Console pour Cairngorm
  • Console pour PureMVC

Comparaison rapide et un peu lapidaire de Cairngorm et PureMVC

A la différence de Cairngorm, PureMVC ne se contente pas de fournir quelques classes utilitaires simples (le ServiceLocator, le Controleur) et des bonnes pratiques d’utilisation.

En effet, il structure plus rigoureusement, et de manière plus souple et plus évolutive, les données, les commandes, les événements et les vues. Si l’on suit les bonnes pratiques recommandées en s’inspirant des exemples fournis, on obtient rapidement une application réellement bien architecturée, et avec moins de code technique à écrire qu’avec Cairngorm

De plus Cairngorm est peu évolutif, contient des manques (par exemple les méthodes result qui ne renvoie rien) et pour dire franchement il faut le patcher pour lacher la puissance des actions. Cairngorm encourage également la pratique du “modèle fourre-tout”, dans lequel on stocke plein de variables globales, et on se retrouve assez vite avec un capharnaüm de données dans ce singleton….

Avec PureMVC, l’approche est un peu différente ce qui évite les écueils ci-dessus et le framework est réellement bien écrit, et très évolutif.

Que choisir alors, Cairngorm ou PureMVC ?

Je ne dis pas qu’il faut porter les applis Cairngorm en PureMVC, ni qu’il faut arrêter d’utiliser Cairngorm, ni que Cairngorm est malcommode ou peu pratique.

Je dis par contre que pour des projets d’envergure, destinés à perdurer, à être développés en équipe, PureMVC sera un choix mieux adapté que Cairngorm.

De plus, même pour des projets plus simples, l’usage de PureMVC sera plus formateur sur les bonnes pratiques et sur le MVC que Cairngorm.

Un seul défaut pour ceux qui ont du mal avec l’anglais: toute la doc est en anglais et n’est pas encore traduite. Mais elle vaut le coup d’être étudiée et lue, car elle est complète et bien écrite.

Le site comporte également des exemples simples à étudier pour se lancer dans l’utilisation de PureMVC.

En conclusion, je dirais que l’étude de PureMVC est un (petit) investissement qui peut en valoir la peine, et un bon apprentissage des patterns du MVC.

Et maintenant la petite intro technique

Pour vous présenter ce framework, permettez-moi de vous retranscrire en français l’introduction à PureMVC qu’on trouve dans la documentation en ligne sur le site

L’objectif de PureMVC est simple: nous aider à séparer l’application en trois tiers distincts qui sont le Modèle, la Vue et le Controleur. Jusque là, rien de bien nouveau, sauf que là c’est vraiment bien pensé.

Les éléments principaux du système sont donc:

  • Le Modèle: il contient des références nommées vers des objets “Proxy”.
  • Les Proxys et les VO: Le code d’un Proxy manipule le modèle de données (incluant celles obtenues par des services remote), qui sont toujours stockées dans des ValueObjects (VO)
  • La Vue: elle contient des références vers des objets “Mediator”. Le code d’un Mediator prend en charge et administre des composants visuels (comme des composants MXML). Il y ajoute des EventListener, envoie et reçoit des Notifications (globales) depuis et vers le reste du système. Il manipule donc directement l’état des composants qu’il administre. Cela sépare clairement la définition de la vue de la logique qui la contrôle
  • Le Controleur: Il maintient une table de commandes nommées. Les commandes sont stateless et sont crées uniquement lorsqu’elles sont requises.
  • Les Commandes: elles peuvent obtenir des références sur les Proxies et les manipuler, elles peuvent aussi envoyer des Notifications, exécuter d’autres Commandes, et elles sont souvent utilisées aussi pour orchestrer des activités complexes ou globales au système, telles que le démarrage et l’arrêt d’une application
  • La Facade: c’est également un Singleton, qui initialise les acteurs fondamentaux du système (Modèle, Vue et Controleur). Il offre un emplacement unique d’où accéder à toutes leurs méthodes publiques.
  • Observateur et Notifications: la circulation des évènements principaux entre les acteurs du noyau s’effectue par une implémentation autonome d’un pattern “Observateur”, avec des évènements spécifiques qui sont ici des Notifications. Cela rend le modèle indépendant du système EventObserver de Flex et AS.

Mode de fonctionnement général

  • Les Notifications peuvent être utilisées pour déclencher l’exécution des commandes (comme dans Cairngorm où l’on dispatch un évenement associé à une commande)
    • Les commandes sont associées à un nom de Notification (dans la Façade concrète) et elles sont automatiquement déclenchées par le contrôleur lors de la réception de leur Notification associée.
    • Typiquement, les Commands orchestrent les interactions complexes entre la Vue et le Modèle, tout en en sachant aussi peu que possible sur chacun d’entre eux
  • Les Mediateurs envoient et reçoivent des Notifications (celles auxquelles ils se sont “abonnés”)
    • lorsqu’ils sont enregistrés dans la Vue, les médiateurs sont interrogés pour connaître les Notifications qui les interessent
    • Plus tard, lorsque une Notification du même nom est envoyé par un acteur quelconque du système, les Médiateurs intéressés seront notifiés et leur méthode handleNotification sera appellée, avec une référence vers la Notification elle-même
  • LesProxys envoient des Notifications mais n’en reçoivent pas
    • Les Proxys peuvent envoyer des Notifications pour des raisons variées, telles qu’un RemoteProxy devant alerter le système qu’il a transféré de nouvelles données, ou encore un Proxy qui s’occuperait lui-même de ses mises à jour. C’est évidemment différent du système de bindings systématisé par Cairngorm avec les ModelLocator.
    • Les proxys ne doivent pas recevoir de Notifications, car ce serait le coupler trop fortement avec le Contrôleur et la Vue?

Pour en savoir plus, il faudra pour l’instant aller voir directement la doc en ligne:

Documentation (en anglais)

Bon MVC à tous !

Articles relatifs

  • Le problème du ModelLocator Cairngorm (5)
  • Digest estival de news Adobe (1)
  • Utiliser le framework Cairngorm pour Flex 2(3/4) (1)
  • Utiliser le framework Cairngorm pour Flex 2 (4/4) : Remarques et Add-On (6)
  • Utiliser le framework Cairngorm pour Flex 2 (2/4) (1)
Catégories: Notes Techniques
Tags: AS3, Cairngorm, Flex, MVC, PureMVC, RIA

10 commentaires sur “Architecture MVC: Cairngorm ou PureMVC ?”

  1. Thomas dit :
    19 septembre 2007 à 8:51

    Merci pour cet article, très intéressant. Voila qui remet en cause mon l’architecture MVC de mon projet…

  2. Xavier dit :
    19 septembre 2007 à 10:42

    Ton article est tres interessant et ce framework a l’air tres complet. Meme si je n’ai pas eu le temps de l’essayer, une question me taraude : Tu te plaignais de Cairngorm en disant que beaucoup de fichiers devaient etre ecrits pour faire une action simple, ce qui faisait baisser la productivite. Ce framewrok a l’air encore plus lourd que Cairngorm a ce niveau. Suis-je dans l’erreur ?

    Merci

  3. jrevel dit :
    19 septembre 2007 à 10:48

    Merci pour ton commentaire.
    C’est sur qu’il faut écrire du code, et comparé à Cairngorm, on se retrouve effectivement avec plus de classes (dont les rôles et responsabilités sont bien réparties).
    Ca peut être un frein à l’adoption de ce framework, mais il se pourrait aussi que des plugins FB voient le jour pour automatiser la création de certaines classes

  4. Koofy dit :
    25 septembre 2007 à 12:27

    Merci pour cet article.
    Nous utilisons le framework: ServeBox
    http://sourceforge.net/projects/sbasfoundry/
    Il semble très proche de PureMVC, et nous permets une décomposition parfaite des éléments de l’application.

    A+

  5. xs_stef dit :
    23 octobre 2007 à 6:37

    Bonjour,
    Merci pour tes éclairages.
    De quoi mettre de l’eau à ton moulin :
    http://www.sephiroth.it/weblog/archives/2007/10/flex_frameworks.php

  6. Laurent dit :
    29 octobre 2007 à 16:18

    Voici d’autres avantages de Puremvc par rapport à Cairngorm qui font la différence.
    Puremvc permet de mettre minimum de code dans les “view”, d’ou une centralisation du code encore plus grande.
    Le fait de pouvoir envoyer des notifications depuis les Mediators augmente la puissance (à la suite d’un autre evenement en cours de traitement par ex.)
    On arrete de mettre des [Bindable] partout.
    …

  7. Tom dit :
    10 décembre 2007 à 22:54

    Disons que pureMVC (développé par une grosse société partenaire d’Adobe) respecte beaucoup plus que cairngorm (développé par Adobe depuis pas mal de temps) les design patterns. Le code en résultant est vraiment bien structuré et très logique et la place prise par le framework est assez faible.

    En fait il faut surtout considérer ces frameworks comme des règles pour coder et on y trouve une efficacité dans le travail en équipe sur des projets faisants intervenir des modèles complexes.

  8. Tom dit :
    10 décembre 2007 à 23:00

    Et puis y a rien d’extraordinaire niveau code, par exemple la classe model.as de pureMVC ne fait que quelques lignes qui permettent de stocker un tableau d’objets Proxy (qui eux permettent de manipuler les données). Le controler lui contient juste un tableau d’objets Command etc etc … La classe Proxy fait 10 lignes à peine !

    Donc pour ma part, je considère vraiment ces frameworks comme des règles de conduite à suivre pour assurer une bonne périnité au projet et pour favoriser une homogénéité du code lors du travail en équipe.

  9. GRAPHEA » Blog Archive » I am back !!! ;-) dit :
    18 décembre 2007 à 11:01

    [...] Flash / Flex 2 m’a permis d’appréhender le formidable framework PureMVC dont parle KapIt dans son blog. Je vous en parle très prochainement, [...]

  10. Quel framework pour une appli flex… - Au fil du web dit :
    31 août 2008 à 22:13

    [...] Quel choix avez vous fait ? Caingorm ou pureMvc ? [...]

Laisser une réponse

Cliquer ici pour annuler la réponse.

Article précédent
Article suivant
 
Haut de page

Copyright © 2009 Kap IT - Blog RIA - Blog Web2Entreprise - Kap Lab

Motorisé par Wordpress - Thème avec YAML par Kap IT