3.B Configuration et initialisation

Toutes les données pour la plate forme de poker et belote
Répondre
Avatar du membre
France fastgil.com
Le Fou
Le Fou
En ligne : Non
Messages : 4799
Enregistré le : 13 janv. 2007, 15:44
Joueur de Poker : oui
Pseudo Winamax : fastgil.com
Localisation : marseille
Genre :
Olympus Arcade : 11 Top 20 des joueurs de l arcade
Pays :
France (fr)
France
Contact :
    unknown unknown
verseau 

3.B Configuration et initialisation

Message non lu par France fastgil.com » 19 sept. 2011, 11:04

Statistiques

Stats Relax

_________________

Stats Poker/Aracde


_________________
3.3 XML des fichiers de configuration

des fichiers XML externes mai être une alternative adéquate aux MXML si:

• Vos changements de configuration souvent et vous souhaitez éviter l'étape de compilation supplémentaire.

• La configuration doit être édité par des personnes sans connaissances en programmation.

• Vous n'êtes pas en utilisant Flex . Bien sûr, vous mai également choisi d'externaliser seulement des parties de votre configuration dans les fichiers XML et coller avec MXML pour le câblage de vos services de base. Voir des mécanismes de configuration 3.6 Combinaison de plusieurs pour plus de détails.
http://www.spicefactory.org/parsley/doc ... hp#combine

Utilisant les classes deux mêmes exemple comme indiqué dans la section ci-dessus MXML, c'est ainsi que le fichier de configuration XML 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.LoginServiceImpl"/>
</objects>

Dans la configuration générale XML ressemble beaucoup comme la configuration MXML avec des balises de persil MXML. Sous le capot balises XML et les balises MXML carte pour les classes même cadre. La principale différence est que l'on suit les conventions de nommage XML, afin que les balises ne sont pas capitalisées et noms d'attribut utiliser des tirets et non pas de cas de chameau (cible EG-propriété au lieu de targetProperty).

Initialisation est juste une seule ligne, en supposant que vous avez enregistré le fichier en tant que config . xml:

Code : Tout sélectionner

XmlContextBuilder.build("config.xml");
Si vous utilisez la configuration XML en Flex, vous pouvez également utiliser une balise pour l'initialisation:

Code : Tout sélectionner

<parsley:ContextBuilder>
    <parsley:XmlConfig file="config.xml"/>
</parsley:ContextBuilder>
Compiler les classes configuré en XML

Une chose que vous devez prendre en compte est que, contrairement à la configuration MXML les classes que vous utilisez dans le fichier de configuration ne sera pas compilé dans votre CFC ou SWF si vous ne les utilisez pas explicitement dans votre code. Cela peut se produire assez souvent car il est bon de programmer en utilisant des interfaces et que déclarer la mise en œuvre concrète dans la configuration du réservoir.

Il existe essentiellement trois possibilités pour résoudre ceci:

• Ajouter une référence explicitement à ces classes dans votre code, même si elle n'est pas nécessaire. La plupart des développeurs le considèrent ce hack un vilain.

• Si vous souhaitez utiliser ces classes comme une bibliothèque, les compiler en un CFC (avec compc vous pouvez inclure des dossiers source tout dans le CFC), puis inclure la totalité de CFC dans votre SWF avec l'option -- Inclure les bibliothèques option du compilateur mxmlc. • Vous pouvez également inclure des cours individuels avec les inclut l'option du compilateur mxmlc.


3.4 ActionScript Configuration

Ce mécanisme de configuration mai semblent inconnus, si vous saviez Flex conteneurs du CIO à ce jour. Il est en quelque sorte similaire à Spring JavaConfig. Il vous permet de créer les objets qui doivent être gérés par le persil dans le code. Servons-nous de nouveau les deux classes à partir de l'exemple MXML et ajoutez-les au conteneur du CIO:

Code : Tout sélectionner

package com.bookstore.config {

class BookStoreConfig {

    public const action:LoginAction = new LoginAction();
    
    public function get service () : LoginServiceImpl {
        var service:LoginServiceImpl = new LoginServiceImpl();
        service.timeout = 3000;
        return service;    
    }
}
}

Encore une fois nous définissons la propriété de délai d'attente, cette fois avec ActionScript. Notez que ce n'est pas grave si vous définir les objets comme une var, une constante ou une fonction getter implicite. Les objets de ces propriétés détiennent seront ajoutés au conteneur du CIO.

Bien entendu d'initialisation est de nouveau juste une seule ligne:

Code : Tout sélectionner

ActionScriptContextBuilder.build(BookStoreConfig);
Ou (en mixte) avec une balise MXML:

Code : Tout sélectionner

<parsley:ContextBuilder config="{BookStoreConfig}"/>
Ce mode de configuration vous permet d'ajouter des métadonnées:

Code : Tout sélectionner

[ObjectDefinition(singleton="false")]
public function get service () : LoginServiceImpl {
    var service:LoginServiceImpl = new LoginServiceImpl();
    service.timeout = 3000;
    return service;    
}
Dans l'exemple ci-dessus le récipient pourrait appeler les getter fonction chaque fois que cet objet est demandée. La valeur par défaut pour la propriété singleton est vrai, donc sans aucune balises de métadonnées Persil appellera cette méthode une seule fois et puis l'objet retourné cache interne et de réutiliser la même instance pour toutes les injections ultérieures.

3.5 Durée de configuration

ajoutées dans la version 2.2 de ce mécanisme de configuration permet de spécifier les instances qui devraient faire partie du conteneur à l'exécution:

Code : Tout sélectionner

<parsley:ContextBuilder>
    <parsley:FlexConfig type="{ServiceConfig}"/>
    <parsley:FlexConfig type="{ControllerConfig}"/>
    <parsley:XmlConfig file="logging.xml"/>
    <parsley:RuntimeConfig instances="{[instance1, instance2]}"/>
</parsley:ContextBuilder>
Si vous avez besoin de spécifier id alors vous pourriez aussi utiliser vos tags enfant imbriqués:

Code : Tout sélectionner

<parsley:ContextBuilder>
    <parsley:FlexConfig type="{ServiceConfig}"/>
    <parsley:FlexConfig type="{ControllerConfig}"/>
    <parsley:XmlConfig file="logging.xml"/>
    <parsley:RuntimeConfig>
        <parsley:Instance id="obj1" instance="{instance1}"/>    
        <parsley:Instance id="obj2" instance="{instance2}"/>    
        <parsley:Instance id="obj3" instance="{instance3}"/>    
    </parsley:RuntimeConfig>
</parsley:ContextBuilder>
La différence entre les objets ajoutés avec le tag RuntimeConfig et DynamicObjects ajouté à un moment plus tard, est que les premiers sont en fait des définitions d'objet racine qui sont injectables dans d'autres objets, car ils sont précisés à l'contexte de la construction du temps.

Vous pouvez même utiliser les fonctions standard <Object> tags maintenant en ligne:

Code : Tout sélectionner

<parsley:ContextBuilder>
    <parsley:FlexConfig type="{ServiceConfig}"/>
    <parsley:FlexConfig type="{ControllerConfig}"/>
    <parsley:XmlConfig file="logging.xml"/>
    <parsley:RuntimeConfig>
        <parsley:Instance id="obj1" instance="{instance1}"/>    
        <parsley:Instance id="obj2" instance="{instance2}"/>    
        <parsley:Object id="obj3" type="{LoginInterceptor}"/> 
            <parsley:MessageInterceptor method="intercept" type="{LoginEvent}"/>
        </parsley:Object>    
    </parsley:RuntimeConfig>
</parsley:ContextBuilder>
Vous pouvez également utiliser ce mécanisme de configuration par programme:

Code : Tout sélectionner

var rcp:RuntimeConfigurationProcessor = new RuntimeConfigurationProcessor();
rcp.addInstance(instance1, "id1");
rcp.addInstance(instance2, "id2");
rcp.addClass(MyClass, "id3");

var builder:CompositeContextBuilder = new DefaultCompositeContextBuilder(viewRoot);
FlexContextBuilder.merge(MainConfig, builder);
builder.addProcessor(rcp);
builder.build();
3.6 La combinaison des mécanismes de configuration multiple

Bien que vous mai préfèrent s'en tenir à un mécanisme de configuration unique pour la plupart des applications simples, vous n'êtes pas obligé de le faire. Vous pouvez utiliser n'importe quelle combinaison des styles de configuration présentées dans ce chapitre, et même créer vos propres.

D'abord, vous mai souhaitez fractionner entre plusieurs fichiers de configuration / classes du style même configuration:

Code : Tout sélectionner

<parsley:ContextBuilder>
    <parsley:FlexConfig type="{BookStoreServices}"/>
    <parsley:FlexConfig type="{BookStoreActions}"/>
</parsley:ContextBuilder>

Code : Tout sélectionner

XmlContextBuilder.buildAll(["services.xml", "actions.xml"]);

Code : Tout sélectionner

ActionScriptContextBuilder.buildAll([BookStoreServices, BookStoreActions]);
Mais enfin, vous pouvez également mélanger comme vous le souhaitez:

Code : Tout sélectionner

<parsley:ContextBuilder>
    <parsley:FlexConfig type="{BookStoreServices}"/>
    <parsley:FlexConfig type="{BookStoreActions}"/>
    <parsley:XmlConfig file="logging.xml"/>
</parsley:ContextBuilder>
ou par programme en utilisant une CompositeContextBuilder:

Code : Tout sélectionner

var builder:CompositeContextBuilder = new DefaultCompositeContextBuilder(this);
FlexContextBuilder.merge(BookStoreConfig, builder);
XmlContextBuilder.merge("logging.xml", builder);
builder.build();

Il est toujours simple: vous n'avez qu'à créer une instance de la classe DefaultCompositeContextBuilder et la transmettre à la fusion des méthodes des classes contexte différents constructeurs.

Dans tous ces exemples, le résultat final est un seul Persil Context. Pour toutes les caractéristiques de conteneurs du CIO comme Dependency Injection ou Messagerie ce n'est pas grave du tout comment vous répartissez objet de configuration entre les fichiers et les classes, le résultat est toujours le même que si elles ont été configurées dans un fichier unique.

Toutefois, pour les applications volumineuses et complexes, vous mai voulons créer des contextes modulaire, ce qui signifie que les objets de configuration multiple ne sont pas fusionnés en un seul contexte, de sorte qu'ils puissent être chargés et déchargés à la demande.

Pour les applications modulaires mai vous voulez lire 8 Bâtir des applications modulaires. Enfin si vous voulez créer votre propre mécanisme de configuration et de l'intégrer de façon transparente avec les styles de configuration existant, vous pouvez créer des implémentations de l'interface ConfigurationProcessor et passer ces implémentations pour CompositeContextBuilder.addProcessor. Voir 11 étendre le cadre pour plus de détails.



Répondre

Retourner vers « AcoeurS-City-Games »