La semaine dernière a eu lieu la Master Class Advanced Flex à Bruxelles, un séminaire donné par l'équipe de Farata Systems. Vous l'aviez peut-être deviné, j'étais présent pour ce séminaire. Autant être clair, si vous n'y étiez pas, vous avez raté une des conférences les plus intéressantes (en France et ses alentours en tout cas).
J'ai eu l'occasion de rencontrer quelques uns (6 je crois) des lecteurs de flex-tutorial.fr à cette occasion (certains que je connaissais seulement par GTalk), c'était vraiment intéressant d'échanger en direct
. Un bonjour à eux
Le Hilton, c'est classe
Le séminaire s'est passé sur 2 jours, au Hilton de Bruxelles. Pour planter le décor, les 2 jours se sont passés au 27e étage du Hilton, dans une salle de réunion panoramique avec sûrement une des meilleures vue sur tout Bruxelles. Rien que pour cela, cela valait le coup. Étaient présentes, une trentaine de personne, ce qui a permis de pouvoir communiquer facilement et de poser des questions. Quelques photos sont disponibles à la fin de cet article.
Le premier soir, l'équipe de Farata Systems a invité tous les participants à prendre une tournée de binche au bar du Hilton, un geste très sympa. Rajoutez à cela le buffet à volonté le midi (et c'est pas celui du Flunch) avec de très bons vins compris dans le prix(400 euros), ce séminaire était une aubaine
.
Assez parlé du contexte, parlons maintenant du contenu.
Les présentateurs de chez Farata Systems
Ils étaient 3 pour animer ce séminaire, chacun spécialiste dans sa "branche" (compilation et optimisation, développement et aspect humains, …): Victor Rasputnis, Yakov Fain et Anatole Tartakovsky. Trois américains d'origine d'Europe de l'Est avec un accent anglais plutôt sympa ^^.
Ils sont tous consultant/développeur, venant du monde Java avec des bonnes années d'expérience derrière eux. Ils ont notamment écrit plusieurs livres spécialisés, notamment:
- Programmation Java pour les enfants, les parents et les grand-parents
- Enterprise development With Flex (disponible en achat en ligne, bientôt en imprimé)
- Flex and Java (je n'ai pas trouvé le lien mais ils me l'ont offert pendant la conférence ^^)
On a eu affaire à de vrais pros, qui ont développé des projets de grande envergure depuis des années. Ils ont tourné et modifié Flex et l'ActionScript dans tous les sens et connaissent tout sur le bout de doigts.
Ce qu'on a pu voir en 2 jours
2 jours, cela peut paraître long sur Flex mais ce fut en fait trop court pour pouvoir tout aborder. Le programme de ce séminaire était très chargé et on a pas eu le temps de tout aborder. De nombreux points sont déjà abordés dans leur blog mais il est toujours plus intéressant de les voir expliqués en live.
Voir le blog Flex de Farata Systems
Voici les points abordés qui m'ont le plus intéressé:
Flex 4 & skinning
Bizarrement pour un geek tenant un blog sur Flex, je n'ai pas encore touché (seulement effleuré) à Flex 4, principalement par manque de temps. Je savais ce qui allait changer "en gros" mais ce séminaire a présenté les changements les plus profonds pour les développeurs habitués à utiliser Flex 3 (voire 2).
Le point le plus intéressant était celui du nouveau paradigme de skinning sous Flex 4 qui essaie de séparer au maximum la présentation du contenu/comportement. En Flex 3, on passait souvent par les styles alors qu'en Flex 4, on va plutôt prendre l'approche des skins, beaucoup plus puissante (gestion des states etc.). On a aussi l'arrivée des "Gumbonents", ces nouveaux composants résidant dans le nouveau namesparce Flex 4 (Spark). Ces composants sont justement beaucoup plus "light" que les anciens ("Halo" components). Par contre, ils ne sont pas très stylés, il faudra passer par la création de skins pour avec de belles applications.Les composants Flex 3 pourront être intégrés dans une application Flex 4.
A ce que j'en ai retenu, Flex 4 apporte de vraies nouvelles opportunités de création pour les développeurs mais la transition Flex 3/Flex 4 sera bien plus difficile que la transition Flex2 / Flex 3 qui s'est faite sans grands problèmes.
Design Patterns
Seulement quelques design pattern ont été abordés, notamment l'utilisation du Mediator (indispensable au développement Flex selon moi) et de l'application en tant que Singleton. Le pseudo DP Application as Singleton est selon moi contestable dans son utilisation, (limite un anti-pattern) mais bon, tous les DP sont discutables. J'aurai voulu en voir d'autres qui selon moi sont plus importants, dommage.
Flex MVC Frameworks
Voilà un thème très intéressant quand on a pas le temps de tester tous les frameworks MVC à la mode (d'autant que la mode change souvent). Ont été abordés, les frameworks Cairngorm, Pure MVC, Mate et Parsley. De là, on peut déjà distinguer 2 catégories:
- Les frameworks "envahissants" tels que Cairngorm et Pure MVC dans lesquels on oblige l'utilisateur à se base sur les classes du framework pour créer son architecture applicatives
- Les frameworks par annotation tels que Mate et Parsley qui se servent des annotations de classes/ variables et des évènements pour mettre en place la communication de votre application.
Pour résumer rapidement, on a:
- Cairngorm: Framework crée à l'origine par Adobe Consulting et qui a été très utilisé au départ grâce à l'encouragement de la part d'Adobe vers les entreprises. Un Framework assez lourd mais bien découpé qui donné la possibilité aux chefs de projet de faire travailler tel développeur sur telle partie et tel développeur sur telle autre partie (voire des dév se trouvant dans des pays différents). L'utilisation des singletons fait que chacun sait où se trouve ce dont il a besoin et le travail avec des développeurs "d'entrée de gamme" est possible. L'utilisation des Singletons en fait cependant un Framework peu extensible et difficile à maintenir. Notez que Cairngorm 3 (prochaine version) reprend partiellement Parsley et devient une agglutination de Best Practices plutôt qu'un framework MVC.
- Pure MVC: Un framework découpé à l'extrême qui oblige les dév à écrire énormément de code (et de création de classes), même pour une application simple. Ici, cela demande une connaissance plus accrue de PureMVC, on ne peut pas parachuter un développeur sur un projet se basant sur PureMVC comme ça, l'apprentissage est forcé.
- Mate: Framework moins envahissant que les autres, se basant beaucoup sur la gymnastique des évènements. Un framework intéressant. Malheureusement encore en version "beta", ce qui peut freiner quelques ardeurs.
- Parsley: Un des inconvénients principal de Parsley est qu'il est développé par une seule personne. On se retrouve donc à sa merci. Parsley reste quand même puissant même si parfois il fait des choses de manière un peu trop "magique". Notez que Parsley sera contenu dans le futur Cairngorm 3.
La conclusion donnée par les présentateurs de chez Farata fut grossièrement "N'utilisez pas de frameworks, ils vous obligent à écrire plus de code pour la plupart alors qu'ils devraient vous aider à en écrire moins. Flex est déjà un framework MVC, vous n'avez pas besoin d'un framework au dessus, vous devez simplement connaître les bonnes pratiques".
De mon point de vue, je suis d'accord avec cette analyse. La plupart des framework Flex vont créer un couplage fort (entre vos classes ou avec le framework) ce qui est contre la philosophie du développement orienté objet. Certes, ils peuvent donner à votre application un architecture commune mais vous n'avez pas besoin de l'aide d'un framework pour cela. Mieux vaut comprendre la philosophie MVC/OOP et l'appliquer que de s'aider d"un framework qui va faire cela de manière complètement magique où vous ne comprendrez parfois pas comment ça fonctionne.
Comme eux, je privilégie l'approche "composant", qui est celle "native" de Flex. Lorsque je développe mes applications, tous les composants sont eux-même MVC (en créant 4/5 classes à chaque fois, ce n'est pas difficile). Tout se passe par évènements, héritage, Binding et interface afin de créer des composants complètement réutilisables (et réutilisés). J'arrive ainsi à avoir beaucoup de ré-utilisation de code et donc très peu de code dupliqué.
L'élimination des singletons fait aussi partie du process. Au début de mes développement Flex, j'ai crée des Singletons pour tout et n'importe quoi car il faut le reconnaitre, c'est pratique. Mais pour la suite, quand on essaie de modulariser son application ou de réduire le couplage entre les classes, c'est le cauchemar (et oui, pas d'héritage avec un singleton).
J'ai simplement expliqué aux développeurs avec lesquels je travaille, l'architecture de chaque composant et comment les faire communiquer entre eux (à l'aide de Mediator, mais le plus souvent par évènements / Binding). Une fois que cette approche est comprise, tout fonctionne comme cela et chacun peut facilement la mettre en place, pas besoin d'expliquer à quoi sert chaque classe du Framework en question.
Jusque là, cette approche se révèle être la plus simple et la meilleure. Si je trouve le temps, j'expliquerai en détail sa mise en place dans un tutorial Flex.
Communication Flex / Java avec BlazeDS et customization de BlazeDS
La plupart des personnes présentes pendant le séminaire utilisent Flex pour des applications connectées à un back-end Java (certains utilisaient cependant du .Net et ColdFusion). Aucune des personnes présente n'utilisant LiveCycleDS, sûrement à cause de son prix exorbitant. Les consultants de chez Farata ont ainsi expliqué en détail l'architecture d'une application en connexion avec BlazeDS et les endroits où que l'on peut modifier pour les besoins spécifiques d'une application.
Cette partie m'a "moins" intéressé car dans le cadre des applications que je développe, j'utilise pour l'instant une communication par XML (pour des raisons historiques). Néanmoins, pour les personnes utilisant BlazeDS, je pense que cette partie a apporté une bien meilleure connaissance de ce qui se passe "under the hood".
Clear Toolkit by Farata
Le Clear Toolkit est comme son nom l'indique, un Toolkit et pas un framework. Il contient des classes et des utilitaires très intéressants, utilisables dans vos applications Flex / Air. Le Clear Toolkit est gratuit, vous pouvez le télécharger sur SourceForge:
Télécharger le Clear ToolKit sur SourceForge
Entre autres, il contient (liste non exhaustive):
- Fx2Ant: Utilitaire permettant de générer des scripts de compilation Ant pour vos projets Flex de manière automatique et optimisée
- Log4Fx: Sorte de super Logger permettant d'effectuer du debug à distance en envoyant les informations de log dans une vue Eclipse ou sur d'autre sortie (texte, …)
- DTO2Fx: Permet de générer des classes ActionScript (Data Transfer Object) à partir des classes Java. Utile pour la création de RemoteObject.
- Clear Data Builder: Permet de créer une application CRUD en liaison avec une base de données en quelques minutes. Contient aussi des classes permettant de faire de la synchronisation avec la base de donnée (avec BlazeDS seulement, sans passer par LCDS!)
A vous donc de faire votre marché dans ces outils de très bonne facture
. Plus d'informations sur leur blog.
Modularisation d'applications Flex et RSL
C'était la partie qui m'intéressait le plus, et sûrement la plus chargée du séminaire. A l'aide de SWF dé-compilés et d'explications sur le fonctionnement interne de Flex lorsqu'il charge des RSL et des modules, j'ai pu comprendre plus clairement la différence et les moyens que je devrais utiliser pour modulariser (encore plus) les applications que je crée. Notamment un partie très intéressante sur la création de RSL "autonomes" en les compilant comme application (avec mxmlc et pas compc) pour qu'ils puissent être initialisé. Si cela vous intéresse, plus d'informations sur leur blog.
Au programme aussi, quelques "tips" pour optimiser les temps de chargement d'application Flex et éviter le téléchargement multiple de RSL.
Pas mal d'autres sujets…
En 2 jours, on a aussi vu pas mal d'autre sujets qui seraient trop long à expliquer en détail, notamment:
- Techniques d'impression avec Flex
- Preloaders et performances "perçues"
- Synchronisation de la BDD locale Air avec une BDD distante
- Gestion du trafic AMF
- Bytecode et compilation de SWF
- …
Quelques photos…
Quelques photos pour vous mettre dans l'ambiance:
Autres Tutoriaux Flex liés:
















Arf, j'aurais vraiment du y aller, quitte à payer ce séminaire de ma poche !
Cela semble être un excellent moyen d'approfondissement des connaissances. J'imagine que tu es reparti heureux avec énormément de sujets/url à creuser ?
Exactement, maintenant il faut que je trouve un moyen de créer des journées de 36 heures ^^.
En ce moment je suis en train de regarder:
http://blog.joa-ebert.com/2010/03/06/compiling-actionscript-in-the-enterprise/
Petit teasing ^^
Fabien
Merci beaucoup pour le retour, ça me fait également bien plaisir de lire que l'utilisation de framework n'est pas forcement souhaitable
Je pense également qu'une organisation propre basée sur des techniques reconnues et éprouvées est le meilleur moyen de produire rapidement des applications robustes
J'attend avec impatience le tuto sur le Mediator …..
Pour ce qui est de Flex 4, je n'ai toujours pas compris ce que concrètement ça va apporter sur le skin ????
On arrête le CSS ? on utilise des états pour skinner les composants ?
PS : si t'as trouvé le moyen de créer des journées de 36h, je suis preneur
je viens de regarder rapidement le pattern mediator sur wikipedia
Est-ce que c'est une classe Singleton chargée de faire communiquer les classes entre elles ?
Si oui, est-ce qu'on l'utilise en propageant un évènement via cette classe puis en abonnant les autres classes à l'évènement en question directement sur le Singleton ?
Si ça ressemble à ça, je le fais sans même savoir que c'était quelque chose d'existant … ça serait plutôt une bonne nouvelle alors
Disons que les possibilités données par les styles avec Flex 3 sont puissantes mais s'il on veut aller plus loin, on doit passer par des Skins. D'après ce que j'ai compris, on devra faire un gros boulot de skinning pour une application Flex 4 (peut etre en passant par un outil comme Catalyst) ce qui ne m'enchante pas trop ^^.
Sinon, le Mediator n'est pas forcement un Singleton (ça peut l'être mais le Singleton c'est le mal). En gros, admettons que tu ai deux composants A et B. Si A et B doivent communiquer entre eux directement, A doit connaitre B et B doit connaitre A. Dans la philosophie OOP/Composant, chaque composant devrait être un maximum autonome et avoir un couplage faible avec les autres composants.
C'est la qu'intervient le Mediator. En gros, c'est une classe C, qui va écouter A et B. En fonction des évènements propagés par A ou B, il va faire les mises à jour nécessaires. C'est dans le Mediator que va se trouver la logique métier. Ainsi, si tu veux réutiliser tes composants pour faire complètement autre chose, il te suffit de modifier C ou de créer D, mais pas de toucher A et B.
Il est fort possible que tu ai déjà fait des Mediator sans t'en rendre compte
Fabien
c'est mon premier commentaire sur ce blog que je trouve excellent
je tiens à vous remercier pour vos tutos tres intéressants et bien expliqués.
ce serai sympa de votre part si vous expliquer votre approche pour concevoir des composants MVC
et les faire communiquer.
Salut,
Pour l'instant, c'est un peu en "chantier" sur les applications que je développe mais le résultat est plutôt positif. Quand je serais sûr que ma structure donne des résultats satisfaisants, j'en ferai part sur le blog
Fabien
Bonjour à tous,
Je suis très intéressé par la possibilité de synchroniser des données mises en cache offline, avec une base de données distante dans une application AIR. Visiblement, Clear Toolkit permet de le faire sans BlazeDS
Quelqu'un a-t-il déjà essayé ? Je ne trouve malheureusement rien sur la toile concernant la façon de procéder …
Si vous avez des pistes je suis fortement intéressé !!!
Bonne fin de journée à tous !!!
Désolé pour le double poste, mais je voulais évidemment parler de LCDS et non de BlazeDS …
Pour la synchro, cela permet de s'affranchir de LCDS, pas de BlazeDS. Des exemples sont normalement fournis avec le Clear Toolkit
Fabien
Oui je suis désolé je me suis bien trompé …
D'accord merci pour ces précisions ! J'ai quelques problèmes avec l'installation de clear toolkit mais il semblerait que le plugin n'est compatible qu'avec Eclipse JEE + plugin Flash Builder … et j'ai essayé de le mettre sur un Flash Builder stand alone …
Désolé, je débute
Merci encore et bravo pour ce site que je visite souvent !!!
Guillaume