- Statistiques
- Stats Relax
- Stats Poker/Aracde
Le présent chapitre donne une introduction très rapide sur la façon de construire une application avec du persil, un lien vers d'autres parties du manuel pour obtenir des descriptions plus détaillées. La plupart des explications s'appliquent de la même manière à la construction des applications Flex ou Flash. Des exemples qui s'appliquent seulement pour le développement Flex sera relevé en conséquence.
2.1 Bonjour tout le monde l'exemple d'application
Si vous préférez d'examiner un exemple d'application simple, avant de lire le manuel, vous pouvez trouver un échantillon Bonjour tout le monde ici, "Afficher la source" est activée. Ce chapitre ne reflète pas l'exemple d'application though. Cela pourrait changer dans les futures versions lorsque les échantillons supplémentaires sont ajoutés à l'encadrement.
2.2 Ajouter la SWCS Framework
Pour commencer à travailler avec Persil vous devez ajouter plusieurs de ses SWCS à votre classpath en premier lieu. Quels sont ceux que vous aurez besoin dépend de l'ensemble de fonctionnalités que vous utilisez et si vous serez la construction d'une application Flash ou Flex. La meilleure façon de commencer est d'ajouter la SWCS qui contiennent l'ensemble du cadre. Vous les trouverez dans le dossier de lancement du zip de téléchargement.
requetes SWCS prescrites pour les demandes de persil
• Flex-flex3-$ (version). CFC (ou-flex4, quand l'aide de Flex 4)
• spicelib-flex-$ (version).
requetes Swc SWCS prescrites pour les demandes de persil
• Flash-flash-$ (version ). spicelib
• CFC-flash-$ (version).
swc sélectionner individuellement cadre SWCS
Si vous souhaitez sélectionner de manière explicite le cadre des modules que vous utilisez en fait pour garder votre classpatch propre, vous pouvez aussi choisir plusieurs des SWCS module contenu dans le modules de dossier dans le dossier de lancement. Pour cela vous aurez besoin de connaître le contenu et les dépendances pour ceux SWCS, qui est décrite au point 1.4 Spicelib Module SWCS.
http://www.spicefactory.org/parsley/doc ... hp#modules
2.3 Définition des dépendances d'objets
C'est probablement la caractéristique la plus fréquemment utilisée de Persil.
Définir les dépendances est beaucoup plus confortable du fait de Persil 2 où nous avons introduit de configuration avec des métadonnées ou MXML en plus des fichiers XML.
Utilisant le [Injecter] tag métadonnées
Vous pouvez utiliser la balise sur les propriétés:
Code : Tout sélectionner
[Inject]
public var loginService:LoginService;
Code : Tout sélectionner
[Inject]
public function set loginService (service:LoginService) : void {
Code : Tout sélectionner
[Inject]
public function init (loginService:LoginService, cartService:CartService = null) : void {
Enfin, vous pouvez également utiliser un identificateur similaire ([InjectConstructor]) sur la déclaration de classe pour l'injection de constructeur (comme le compilateur Flex ne tient pas compte des métadonnées sur les constructeurs):
Code : Tout sélectionner
[InjectConstructor]
public class LoginAction {
function LoginAction (loginService:LoginService, cartService:CartService = null) : void {
Meilleures pratiques
dans tous les exemples, nous avons montré dans cette section les dépendances seront sélectionnés par type, puisque Persil va réfléchir sur la propriété et les types de paramètre de méthode. Pour bénéficier du découplage qu'un conteneur CIO vous propose de préférer à déclarer les types d'interface à des points d'injection. De cette façon vous pouvez passer d'implémentations dans la configuration sans toucher les points d'injection de classes qui ont besoin de ces services.
Bien sûr, cela ne fonctionne que lorsque vous ajoutez seulement un objet unique correspondant au type au point d'injection au conteneur. Si vous avez mise en œuvre de plusieurs de la même interface, vous aurez besoin pour passer à l'injection par id place: il est disponible uniquement pour les propriétés:
Code : Tout sélectionner
[Inject(id="mainLoginService")]
public var loginService:LoginService;
http://www.spicefactory.org/parsley/doc ... .php#intro
2.4 Envoi et recevoir des messages
Bien Dependency Injection permet déjà un certain niveau de découplage, si vous déclarez des points d'injection avec des types d'interface, pour certaines parties de l'application que vous préférez couplage lâche même, en laissant les parties de votre demande de communiquer à travers des messages, sans que l'expéditeur et les objets de réception d'avoir à connaître l'autre.
Si vous générez une application avec le modèle d'architecture MVC par exemple, vous allez probablement créer des classes du médiateur qui transforment les événements de faible niveau pour afficher les messages d'application qui seront expédiés à travers une application de messagerie sous-système de l'échelle de sorte que toute action / contrôleur peut s'inscrire à tous les types de messages, il est intéresse
Pour plus de détails sur ce sujet voir le point 5 de messagerie et 9, la construction d'architectures MVC.
http://www.spicefactory.org/parsley/doc ... .php#intro
De persil 2, vous pouvez configurer l'envoi ainsi que le côté de réception avec des balises de métadonnées. La partie d'envoi mai simplement contenir un [ManagedEvents] balise à la déclaration de classe, qui annonce des événements de ce dépêches classe doit être bien gérée:
Code : Tout sélectionner
[Event(name="loginSuccess",type="com.bookstore.events.LoginEvent")]
[Event(name="loginFailed",type="com.bookstore.events.LoginEvent")]
[Event(name="stateChange",type="flash.events.Event")]
[ManagedEvents("loginSuccess,loginFailure")]
public class LoginServiceImpl extends EventDispatcher implements LoginService {
[...]
private function handleLoginResult (user:User) : void {
dispatchEvent(new LoginEvent("loginSuccess", user));
}
}
Ici on indique le conteneur que chaque fois que cela envoie un événement de classe Loginsuccess type ou loginfailed nous voulons que le conteneur de l'envoyer à tous les gestionnaires enregistrés.
D'autres événements seront simplement ignorées, cette classe ne peut toujours envoyer des événements de faible niveau d'autres objets qui dépendent directement de cette classe mai auditeurs réguliers pour vous inscrire.
Pour la partie réception, vous pouvez utiliser les touches [MessageHandler] balise pour signaler l'intérêt pour un particulier type de message, déterminé par le type de paramètre de la méthode:
Code : Tout sélectionner
[MessageHandler]
public function login (event:LoginEvent) : void {
Code : Tout sélectionner
[MessageHandler(selector="loginSuccess)]
public function login (event:LoginEvent) : void {
Il ya des mots clés pour le côté de réception comme [MessageBinding] ou [MessageInterceptor ]. Celles-ci seront expliqués dans 5 Messaging.
http://www.spicefactory.org/parsley/doc ... .php#intro
Furhermore car le module est appelé messagerie et non pas des événements système, vous pouvez utiliser n'importe quelle classe comme un message, non seulement les classes étendant flash.events.Event. Pour plus de détails voir 5.4 Injected MessageDispatchers.
http://www.spicefactory.org/parsley/doc ... ispatchers
2.5 l'assemblage d'objets
Il ya quelques options de configuration beaucoup plus en plus des tags pour Dependency Injection et Messagerie. Mais puisque ce sont eux les plus courantes que nous allons maintenant vous montrer comment assembler ces objets pour le conteneur de la COI. Une fois que vous ajouté des balises de métadonnées pour les classes que vous devez dire le récipient où les objets qu'il doit gérer.
Applications Flex
Dans Flex, vous voudrez peut-être préférez MXML configuration. Vous pouvez créer une classe simple MXML (en utilisant mx: Object comme la balise racine), et ajoutez toutes les classes que vous voulez être géré par Persil:
Code : Tout sélectionner
<mx:Object
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:services="com.bookstore.services.*"
xmlns:actions="com.bookstore.actions.*">
<services:LoginServiceImpl timeout="3000"/>
<services:CartServiceImpl timeout="3000"/>
<actions:LoginAction/>
<actions:AddToCartAction/>
<actions:DeleteCartAction/>
</mx:Object>
Bien sûr, vous pouvez également utiliser ce fichier de configuration pour la mise en valeur des propriétés supplémentaires. Elles seront combinées avec le traitement des balises de métadonnées pour toutes les classes ajoutées au conteneur.
Dans cet exemple, nous ne précise pas les attributs id. Si vous utilisez juste d'injection par type que vous n'avez pas besoin d'eux. Dans le cas où vous utilisez les identifiants à des points d'injection, comme dans le dernier exemple de la section sur l'injection vous devez les indiquer ici:
Code : Tout sélectionner
<services:AdminLoginServiceImpl id="adminLogin" timeout="3000"/>
<services:UserLoginServiceImpl id="userService" timeout="3000"/>
Code : Tout sélectionner
[Inject(id="adminLogin")]
public var adminLogin:LoginService;
[Inject(id="userLogin")]
public var userLogin:LoginService;
Applications Flash
Dans ce cas MXML n'est pas disponible. Ainsi, le mécanisme de configuration préférée est sans doute l'utilisation de fichiers XML. Bien sûr, vous pouvez également utiliser des fichiers externes XML dans les applications Flex si vous ne voulez pas compiler la configuration dans votre application.
Un exemple de configuration XML correspondant à l'exemple MXML ci-dessus ressemblerait à ceci:
Code : Tout sélectionner
<objects
xmlns="http://www.spicefactory.org/parsley"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.spicefactory.org/parsley
http://www.spicefactory.org/parsley/schema/2.0/parsley-core.xsd"
>
<object type="com.bookstore.services.LoginServiceImpl">
<property name="timeout" value="3000"/>
</object>
<object type="com.bookstore.services.CartServiceImpl">
<property name="timeout" value="3000"/>
</object>
<object type="com.bookstore.actions.LoginAction"/>
<object type="com.bookstore.actions.AddToCartAction"/>
<object type="com.bookstore.actions.DeleteCartAction"/>
</objects>
Ce sont les options les plus communes pour l'assemblage d'objets.
Vous trouverez de nombreux exemples dans 3 Configuration et initialisation.
http://www.spicefactory.org/parsley/doc ... .php#intro
2.6 Initialisation du Cadre
Maintenant que vous avez configuré vos classes avec des balises de métadonnées et les rassembla en MXML ou XML, il est enfin temps pour initialiser le tout. Heureusement, dans la plupart des cas il s'agit d'une seule ligne ou une balise simple.
Pour la configuration MXML fichier, nous avons créé, en supposant que nous l'appelions BookStoreConfig.mxml, la balise ressemblera à ceci:
Code : Tout sélectionner
<parsley:ContextBuilder config="{BookStoreConfig}"/>
Pour l'exemple XML, nous devons initialiser le contexte par programme dans une application Flash:
Code : Tout sélectionner
XmlContextBuilder.build("config.xml");
http://www.spicefactory.org/parsley/doc ... hp#combine
Pour les applications modulaires vous ne voulez pas d'amalgame dans un contexte monolithique et de charger tous ces trucs sur le démarrage d'application. Pour la construction d'applications modulaires et le chargement et le déchargement des configurations sur demande voir 8 Construire des applications modulaires.
http://www.spicefactory.org/parsley/doc ... .php#intro
2.7 Services Ajout de plus
Puisqu'il s'agit de la section Mise en route, nous ne couvrait que les cas d'utilisation les plus courantes. Mais j'espère que pour des applications simples, il suffit de vous permettre de continuer. Comme vous l'avez remarqué mai déjà le manuel est assez vaste et si vous pensez vous besoin de beaucoup plus d'options que traités dans ce chapitre, vous devriez consulter les autres chapitres.
Si vous souhaitez simplement avoir une idée de l'ensemble de fonctionnalités Persil vous offre mai voulez pour commencer Liste des Fonctionnalités 1.1.
http://www.spicefactory.org/parsley/doc ... p#features
Les options les plus intéressantes ne sont pas couverts dans ce chapitre sont probablement:
• 3.4 ActionScript de configuration: Vous n'êtes pas limité à la configuration avec des métadonnées, MXML ou XML, il ya même une option de suite, qui vous donne une flexibilité supplémentaire.
• 5.7 MessageInterceptors: Une alternative intéressante à la MessageHandlers abordés dans ce chapitre qui vous permet même d'interférer avec le processus d'envoi de message (par exemple, de suspension et de reprise ou d'annuler le traitement des messages).
• 5.9 Asynchronous méthodes de commande: vous pouvez laisser le cadre de gérer les opérations asynchrones et de leurs résultats et les défauts de vous.
• 6.1 usines utilisant: Au lieu de l'assemblage d'objets cible lui-même, vous pouvez également ajouter des usines pour le conteneur du CIO qui créent des objets, qui vous donne plus de souplesse sur la façon dont les objets sont instanciés.
• 6.2 Asynchronous objet d'initialisation: l'option de configuration pour l'initialisation asynchrone objets (par exemple des objets qui ont besoin de charger des données avant de pouvoir opérer). Dans ce cas, le conteneur va reporter l'initialisation d'autres objets que ceux qui sont configurés pour être asynchrones sont prêts.
• 7 dynamique Voir Câblage: Nous avons déjà évoqué brièvement un. Vous permet de fil Flex composants définis en MXML pour objets déclarés dans le conteneur de la COI.
• 8 Bâtir des applications modulaires: Associate services configurés, des actions, des médiateurs et ainsi de suite avec un contexte de configuration qui peuvent être chargés et déchargés à la demande.
• 10.1 ResourceBindings: Pour les propriétés liantes d'objets gérés à des ressources localisées, les mettre à jour automatiquement lorsque les modifications localeChain.
• 11.2 Création de balises de configuration: Si vous souhaitez ajouter vos propres métadonnées, MXML ou des balises de configuration XML. Utile pour simplifier les tâches récurrentes de configuration ou de créer des cadres sur le dessus de persil.