fondamentaux d'architecture d'une application flex

37
Fondamentaux d'architecture d'une application Flex Adobe eSeminar - 06/06/08 David Deraedt Centre Regart.net

Upload: david-deraedt

Post on 26-Jun-2015

4.356 views

Category:

Education


0 download

DESCRIPTION

eSeminar for Adobe France, June 2008. (French)

TRANSCRIPT

Page 1: Fondamentaux d'architecture d'une application Flex

Fondamentaux d'architectured'une application Flex

Adobe eSeminar - 06/06/08David Deraedt

Centre Regart.net

Page 2: Fondamentaux d'architecture d'une application Flex

Introduction

Comment organiser le code d'une application Flex ?

Ne sont pas concernés :• Démonstrations• Exemples• Très petites applications

Généralement :• Enjeu commercial• Utilisateurs "réels"• Durée de vie importante• Travail en équipe (?)

Page 3: Fondamentaux d'architecture d'une application Flex

Contraintes

Constat : Maintenance > Développement initial

Méthodes agiles = cycles courts, itératifs

Faciliter :• Modifications• Tests / Débogage• Travail en équipe• Productivité

Page 4: Fondamentaux d'architecture d'une application Flex

Bonnes pratiques

Séparer les responsabilités• Dans le code• Dans l'équipe

Limiter le couplage• Indépendance• Modularité

Partager• Informations (Méthodologie et terminologie, documents)• Outils (factorisation, mutualisation)

Page 5: Fondamentaux d'architecture d'une application Flex

Mise en oeuvre

POO• Encapsulation• Polymorphisme• Design patterns• Architecture patterns

Contexte technologique• Flex = RIA = Couche

présentation d'une architecture 3 tiers

Page 6: Fondamentaux d'architecture d'une application Flex

Rich Internet Application

Architecture 3 tiers       

 

Architecture RIA:• Client s'exécute sur poste client• Client conscient de son état, "stateful"• Le client connaît les détails d'implémentation du serveur• Architecture plus "client / serveur"

Rich Internet Application

Page 7: Fondamentaux d'architecture d'une application Flex

Rich Internet Application

Répartition des rôles Client / Serveur• Serveur d'application = règles métiers• Client riche = relation à l'utilisateur

Quelle architecture côté serveur ?• Présentation : Client Riche• Intégration : Business Objects via des Services• Persistance (ORM) : VOs / DTOs, DAO, ActiveRecord, ...

Page 8: Fondamentaux d'architecture d'une application Flex

Rich Internet Application

Page 9: Fondamentaux d'architecture d'une application Flex

Rich Internet Application

Le client (RIA Flex) communique avec :• L'API du service (parfois, directement DAOs)• Les VOs / DTOs

Mais de quelle manière ?

Page 10: Fondamentaux d'architecture d'une application Flex

Communication

Avec Flex, deux familles d'outils :• Communication temps réel• Communication RPC asynchrone

RPC :• HTTPService• WebService• RemoteObject

Page 11: Fondamentaux d'architecture d'une application Flex

HTTPService

• Requêtes HTTP(s)• URLencoding, (couple identifiant/valeur voire XML)• Script / Page ASP, JSP, PHP, ...• Services REST

Les données échangées ne sont pas typées.

=> Intérêt limité à de "petites" tâches individuelles - Upload de fichiers, création de fichiers, Proxies, etc...

ou

=> JSON (typage des données)

Page 12: Fondamentaux d'architecture d'une application Flex

WebService

Au sens SOAP• Envoie / reçoit SOAP (XML)• Web Service Definition Language (WSDL)• Echanges de quelques données "typées" :

• Types primitifs AS3 (Boolean, int, uint, Number, String, ...)• Quelques types complexes du top level (Array, Date)• Sérialisation/ Désérialisation côté Flex• Pas de type personnalisé

Page 13: Fondamentaux d'architecture d'une application Flex

RemoteObject

• Remoting : AMF : ActionScript Message Format = AS binaire• HTTP(S) ou protocoles temps réél• AMF3 = AS3 (Flex), AMF0 = AS1 + AS2• Spécifications ouvertes

Avantages• Performance (car binaire), cf Census• Confort de développement car...

Données typées• Types primitifs• Types complexes Top Level (selon passerelle)• Types personnalisés : Value Objects ([RemoteClass])

... = 100 % POO !

Page 14: Fondamentaux d'architecture d'une application Flex

RemoteObject

Inconvéniant :Nécessite une passerelle AMF3 côté serveur(Sérialisation / Désérialisation AMF3)

Solutions gratuites et OpenSource pour toutes technos• J2EE : BlazeDS, WebORB, GraniteDS, LCDS(ES)• .NET : Fluorine, WebORB• PHP : AMFPHP, WebORB, SABREAMF• ROR : RubyAMF, WebORB• Python : PyAMF• Perl : ?

Page 15: Fondamentaux d'architecture d'une application Flex

 

Page 16: Fondamentaux d'architecture d'une application Flex

Architecture côté Flex

A priori : hiérarchie de composants MXML.

Sommet de la pyramide = Document principal(Application, WindowedApplication, Module)

Les composants :• Représentent les données graphiquement• Reçoivent l'interaction utilisateur

=> C'est la vue d'un MVC• Ces vues peuvent elles être indépendantes ?• Qui va s'occuper du reste (logique de l'application) ?

Page 17: Fondamentaux d'architecture d'une application Flex

Indépendance des composants

Permise par 2 Mécanismes fondamentaux :• DataBinding = Mise à jour des données automatisée (Model

-> View)

• Evénements = Transmission l'interaction utilisateur (View -> Controller)

Note : attribut source de la balise Script"Code Behind" purement formel => Insuffisant

Page 18: Fondamentaux d'architecture d'une application Flex

Limites du framework Flex

Cas classique : le document principal gère toute la logique de l'application !

Conséquence :• Vues bien découplées• Reste de l'application très monolithique (code spaghetti)

Conclusion:• Reste la solution la plus simple pour de "petites"

applications• Très vite limité

Page 19: Fondamentaux d'architecture d'une application Flex

Un MVC côté Flex

 

Page 20: Fondamentaux d'architecture d'une application Flex

Un MVC côté Flex : Le modèle

• Stocke les données• Ne sait pas comment elles sont représentées• C'est l'état de notre application• Aucune logique (sauf accès aux données)• Souvent, simple liste de propriétés publiques• VOs, ArrayCollections• Tout est "Bindable"

Page 21: Fondamentaux d'architecture d'une application Flex

Un MVC côté Flex : Le modèle

 

Page 22: Fondamentaux d'architecture d'une application Flex

Un MVC côté Flex : Le contrôleur

• Cerveau de l'application• Logique entre vue et modèle• Ecoute les événements diffusés par les vues• Met à jour le modèle• Ne connaît rien des vues

Design pattern "Command"• Déléguer les tâches à des objets (Commands)• Command = logique derrière une User Gesture• Permet de traiter chaque tâche comme un objet (historique,

undo, ...)

Page 23: Fondamentaux d'architecture d'une application Flex

Un MVC côté Flex : Le contrôleur

 

Page 24: Fondamentaux d'architecture d'une application Flex

Un MVC côté Flex : Le contrôleur

Problème de fond :Comment faire remonter les événements vers un Contrôleur ?• Bubbling : s'appuie sur la display list (pas suffisant)• Remonter parent par parent : clone(), dispatchEvent(event)

=> Difficile de faire quelque chose de propre ET standard

Page 25: Fondamentaux d'architecture d'une application Flex

Un MVC côté Flex : Le contrôleur

 Parfois, besoin de mettre à jour une vue dans une commande• Problème :

Le contrôleur ne doit rien savoir de la vue

• Solution :Diffuser un événement écouté par un tiers qui, lui connaît la vue. (View Helpers, View Controlers ...)

Page 26: Fondamentaux d'architecture d'une application Flex

Un MVC côté Flex : Le contrôleur

 

Page 27: Fondamentaux d'architecture d'une application Flex

La couche métier

• Les commandes doivent communiquer avec le Service• Risque de couplage entre les deux• Déléguer à un objet la communication avec le Service

Le "BusinessDelegate" :• Expose l'API du Service en AS3• Encapsule l'implémentation de sa communication• Transmet le résultat à un Responder (Command)

Avantages • Découplage entre Command et Service• Typage, Intelliscence

Page 28: Fondamentaux d'architecture d'une application Flex

La couche métier

 

Page 29: Fondamentaux d'architecture d'une application Flex

Vue d'ensemble

Page 30: Fondamentaux d'architecture d'une application Flex

Remarques

Peut paraître abstrait et compliqué, mais• Beaucoup de classes sont très simples• Toutes les classes sont courtes et lisibles• Pas nécessaire de tout utiliser• Concerne la majorité des applications• Méthodologie et terminologie commune• Adapté aux méthodes agiles / itératives

De plus, des outils peuvent nous aider• Frameworks d'architecture• Générateurs de code

Page 31: Fondamentaux d'architecture d'une application Flex

Les frameworks d'architecture

Ce sont des bibliothèques tierces (.swc)• Pas indispensables...• Mais difficile de faire sans !

Les deux cas les plus communs :• Cairngorm• PureMVC

Page 32: Fondamentaux d'architecture d'une application Flex

Cairngorm

• Framework d'architecture Flex• Créé par Adobe Consulting• S'inspire des core patterns J2EE• Le plus utilisé

Implémentation• Modèle : ModelLocator (Singleton)• Type d'événement : CairngormEvent• Pattern FrontController / Command• ServiceLocator• BusinessDelegate optionnel

Page 33: Fondamentaux d'architecture d'une application Flex

Cairngorm

Problèmes• Difficile de faire communiquer Commandes et vues• Risque de couplage des vues avec Cairngorm

(event.dispatch())• Pas terrible avec les Modules• Trop de Singletons => problèmes de tests• Documentation faible

Notes• Beaucoup de ressources sur le Web• Générateurs de code• Cairngorm Extensions (Universal Minds)

Page 34: Fondamentaux d'architecture d'une application Flex

PureMVC

• Framework AS3 (pas Flex, ni Flash)• Créé par Cliff Hall• Existe pour d'autres technologies• Documentation de qualité et communauté active

Implémentation• Modèle : Proxies• Contrôleur : Façade et Commands• Evénements : Notifications• Vues : Mediator

Page 35: Fondamentaux d'architecture d'une application Flex

PureMVC

Problèmes• Pas de DataBinding entre Modèle et Vues• Modèle événementiel non standard• Plus de travail de Cairngorm

Souffre de son éloignement vis-à-vis du framework Flex

Page 36: Fondamentaux d'architecture d'une application Flex

Conclusion

• Privilégier une approche pragmatique• Ne pas essayer d'appliquer une solution avant d'avoir

rencontré le problème• Ne pas avoir peur de la quantité de code : cela peut s'avérer

rentable au final• S'appuyer sur des techniques qui ont fait leurs preuves

plutôt que de réinventer la roue• Connaître un minimum Flex avant d'essayer les frameworks

d'architecture• Commencer par Cairngorm avant PureMVC

Page 37: Fondamentaux d'architecture d'une application Flex

Questions / Réponses

David Deraedt - Flex My Dayhttp://www.dehats.com

Centre de formation Regart.nethttp://www.regart.net

Remerciements

Lovely Chartshttp://www.lovelycharts.com