IoC ajouter un init des objets avec un mapping directement dans l'attribut "properties"

2 views
Skip to first unread message

eKameleon

unread,
Mar 11, 2010, 10:41:59 AM3/11/10
to VEGAS - ECMASCript & ActionScript OpenSource framework
Hello :)

Petite réflexion aujourd'hui sur un problème récurrent dans les
définitions d'objets de la fabrique IoC de VEGAS :)

En fait depuis un petit moment je me retrouve confronté à un problème
sur des objets ayant aucune méthode ou constructeur prévu pour
initialiser l'objet de façon rapide via un for..in par exemple et il
faut donc initialiser les objets dans les définitions d'objet à la
main. Cela peut devenir assez lourd surtout si on combine ce process
avec un fichier de config ou de localisation pour stocker les
données ....

Je vais prendre un exemple très explicite avec un champ de texte
défini dans le context d'une fabrique IoC avec si possible l'ensemble
des valeurs dans la configuration de l'application.

1 - Dans le fichier config.eden nous trouvons la variable suivante :

my_field =
{
embedFonts : true ,
selectable : false ,
multiline : true ,
wordWrap : true
};

2 - Dans le context de la fabrique nous trouvons la définition d'objet
suivante :

{
id : "my_field" ,
type : flash.text.TextField ,
properties :
[
{ name : "embedFonts , config : "my_field.embedFonts" } ,
{ name : "selectable , config : "my_field.selectable" } ,
{ name : "multiline , config : "multiline.embedFonts" } ,
{ name : "wordWrap , config : "my_field.wordWrap" }
]
}

Je n'ai pas poussé l'exemple mais on se rend vite compte que nous
sommes obligé à l'heure actuelle de redéfinir pour chaque valeur
déclaréer dans la config de l'application une définition de
propriété ... pour quelques éléments cela peut passer mais pour un
gros nombre d'attributs cela peut rapidement devenir difficile à
maintenir et surtout lourd !

L'idée donc est de proposer ici une stratégie "magique" en ajoutant
dans la liste des properties un object défini avec un name spécial ...
par exemple #init ou #map (à voir) et du coup on pourrait réduire
considérablement la taille des définitions d'objets, exemple :

{
id : "my_field" ,
type : flash.text.TextField ,
properties :
[
{ name : "#init" , config : "my_field" }
]
}

Je me retrouve avec une seule ligne pour initialiser des tas de
propriétés et je peux bien entendu placer cette initialisation
n'importe où dans la liste des properties (avant un lancement de
méthode ou après par exemple selon les besoins).

On peut donc très bien ensuite utiliser comme d'habitude les
attributs : value, ref, locale, config

{ name : "#init" , config : "my_field" }
{ name : "#init" , locale : "my_field" }
{ name : "#init" , ref : "my_field_init" }
{ name : "#init" , value : { embedFonts : true , multiline : true } }

Je n'ai pas encore fixé le nom "magique" de la définition de
propriété ... si vous avez des idées là dessus faut pas hésiter à m'en
parler ;) Pour le moment j'hésite entre #map et #init

Je pense garder le # devant le name magique pour rester cohérent avec
les MagicReference : #this, #root, etc.

A mon avis cette fonctionnalité est indispensable dans les futures
versions du moteur IoC de VEGAS, j'ai ouvert à ce sujet un ticket sur
le google code du projet :

http://code.google.com/p/vegas/issues/detail?id=77

J'attends un peu vos retours pour me mettre sur cette nouvelle
fonctionnalité, mais je ne vais pas trop tarder non plus pour
l'ajoutée ;)

EKA+ :)

eKameleon

unread,
Mar 15, 2010, 11:22:24 AM3/15/10
to VEGAS - ECMASCript & ActionScript OpenSource framework
Hello :)

J'ai donc ajouté dans la dernière version de VEGAS le mot clé magique
#init pour lancer un ou plusieurs for..in sur un objet. Après quelques
tests dans divers applications en cours je me rend compte que sur une
application conséquente cette petite fonctionnalité va enlever des 100
aines de lignes dans les fichiers de context externe de vos
fabriques !

Je me demande comment j'ai pu passer autant de temps sans mettre en
place cette nouvelle fonctionnalité du coup ?

EKA+ :)

Reply all
Reply to author
Forward
0 new messages