2010-05-09 5 views
1

J'aimerais pouvoir comprendre comment développer une application Flex afin de pouvoir fournir des classes d'implémentation lors de l'exécution. Dans le monde Java, je spécifierais des interfaces dans un JAR (par exemple myapp-api.jar), l'implémentation dans un JAR séparé (par exemple myapp-impl.jar) et les empaqueterais avec d'autres ressources dans l'application WAR (par exemple myapp. guerre). Dans le code de l'application, j'instancierais dynamiquement les classes d'implémentation.Développement d'applications Flex modulaires

Cette approche est-elle possible dans Flex? Je suis conscient que je peux instancier des classes dynamiquement, c'est un bon début. Je suis un peu confus par les modules, les RSL et les SWC. Je souhaitais créer une application SWF qui avait des références à une interface SWC et une mise en œuvre SWC. L'idée est que si j'ai besoin de modifier l'application pour un client spécifique, je pourrais créer un nouveau SWC d'implémentation et ne pas avoir à modifier le SWF ou l'interface SWC.

Des idées?

Répondre

2

C'est un peu plus difficile à faire en flash/flex qu'en java, ou du moins c'est un peu plus obscur si vous venez d'un arrière-plan java). J'ai quelques conseils pour vous. Vous n'avez besoin d'utiliser les bibliothèques RSL que si vous voulez vraiment avoir des bibliothèques de classes séparées au moment de l'exécution, et surtout si vous pensez que cette bibliothèque sera utilisée sur plusieurs projets que le même groupe de personnes utilisera. (Ils sont principalement destinés à réduire le temps de téléchargement/démarrage)

Vous pouvez également diviser votre application en plusieurs parties vous-même - dans ce cas, vous devez vous assurer de ne pas remplir deux fois la même information - cela peut être fait en générant un rapport de liens sur le premier swf compilé et en excluant ces classes de la deuxième compilation. C'est ainsi que modules travaille en flex. Les fichiers SWC sont principalement utilisés comme une bibliothèque de compilation (il s'agit essentiellement d'un fichier zip contenant un fichier swf et un fichier xml de métadonnées qui en décrit le contenu). Si vous voulez avoir un ensemble d'interfaces distinct dans une bibliothèque, vous pouvez générer un swc avec les interfaces et compiler un autre swc avec l'implémentation, vous devez exclure les interfaces lors de la compilation des classes d'implémentation si vous voulez éviter d'avoir des doublons définitions de classe/interface. Si vous compilez votre application finale en reliant les SWC d'interface et d'implémentation sans exclure les classes, vous pouvez simplement utiliser votre SWF final pour exécuter l'application. Si vous voulez la garder vraiment séparée, vous devriez regarder dans les modules vous créez un projet ActionScript pur). J'ai utilisé moi-même des SWC comme décrit ci-dessus, et je me penche maintenant sur les RSL et les modules moi-même pour notre projet Curren.

+0

Merci pour la réponse Simon. J'ai réussi à compiler une interface SWC et une implémentation SWC (interfaces moins) en utilisant compc/ant. Je suppose que la prochaine étape consiste à compiler les interfaces SWC dans l'application, puis de charger l'implémentation SWC à l'exécution. Je veux vraiment éviter de recompiler l'application principale si possible. Idéalement, je voudrais passer un paramètre au fichier SWF pour indiquer l'implémentation que SWC doit charger lors de l'exécution. Je comprends que seuls les fichiers SWF peuvent être chargés, donc je vais devoir trouver comment contourner cela - par exemple. puis-je convertir SWC en SWF ou extraire le SWF du SWC et l'utiliser? – ukdavo

+1

Vous pouvez obtenir un swf à partir d'un swc en décompressant le swc. Vous pouvez charger le swf à l'aide de la classe Loader. Si vous souhaitez que le code partage le même contexte, vous devez probablement définir le domaine d'application du chargeur sur le même domaine que le reste de votre application (je ne suis pas sûr que par défaut ou non). –

Questions connexes