|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 279 ![]() |
bonjour,
j'aimerais avoir votre opinion quant à l'utilité des states dans un composant personnalisé. Attention, j'ai bien dis "states" et non "skinStates". Je m'explique : il n'est plus à démontrer l'utilité du pattern MVC (Model, Vue, Controleur) et Flex via sa nouvelle architecture Spark permet de découper plus facilement un composant en ces 3 tiers (voir un article ici ). Ainsi, ces 3 tiers peuvent être représentés par le schéma ci dessous (source : lien ci dessus) : ![]() La Vue, représentée dorénavant dans l'architecture Spark par la classe skin associée au composant, doit donc encapsuler toute la logique visuelle du composant en question. Logique visuelle comprenant entre autre :
nota : j'appelle composants dans la liste non exhaustive ci dessus, les sous composants du composant personnalisé en question (ie : les fameux skinParts). Or, Flex via la classe UIComponent (classe parente de tous les composants personnalisés), définit une propriété "states" de type tableau initialisée à null mais pouvant facilement être modifiée via les getters/setters. Cette propriété sert à créer des états sur le composant lui même contrairement au skinStates définissant des états sur les skins. Cependant, nous sommes en droit de nous poser la question suivante : A quoi peut donc servir cette propriété states sur le composant personnalisé ? Par "facilité" ou par méconnaissance du pattern MVC, nous pourrions être tentés de basculer la logique vue dans la logique contrôleur et de faire dans le cas d'un composant personnalisé étendant la classe SkinnableContainer et nommé MyPersoComp la chose suivante : Code :
Code :
Cet exemple bien que simpliste montre la facilité avec laquelle un développeur peut se mélanger les pinceaux avec les notions de "component states" et de "skin states". Certes, l'exemple évoqué représente la façon la plus directe et la plus rapide pour modifier rapidement et automatiquement une propriété en fonction d'un état, mais comme souvent en informatique, la solution de facilité n'est pas la meilleure. Voici maintenant 2 solutions qui selon moi représentent une bien meilleure alternative : 1ère solution : faire du "mirroring delegate" description: nous créons toujours 2 états state1 et state2 sur notre contrôleur (notre composant dérivé de UIComponent) puis nous surchargeons la méthode getCurrentSkinState() de ce composant afin de faire correspondre (mirroring) l'état de notre composant avec l'état de notre skin. Nous avons donc un tableau de states correspondant au tableau de skinStates ou du moins une relation 1-1 entre les states et les skinStates. MyPersoComp (version AS3): Code :
Code :
Code :
2ième solution : solution "stateless states" description: cette solution repose grandement sur le fondement de la solution précédente excepté que l'on s'abstient d'utiliser la propriété states de notre composant. On préférera utiliser une simple propriété de notre classe afin de stocker le nom de notre skinState (un peu moins consommateur de ressources donc). MyPersoComp : Code :
Appel dans notre application : MyPersoCompSkin1 : Les limites de ces 2 solutions : les solutions évoquées sont parfaitement fonctionnelles si le composant personnalisé ne comprend uniquement que des sous composants de type "skinPart" c'est à dire qu'il faut que tous ces sous composants soient listés via la metadata [SkinPart] dans notre fichier .as. A défaut, si nous ajoutons des composants non annotés par cette metadata dans notre composant (ce qui est loin d'être recommandé ni recommandable je pense), il nous faudra faire un "mix" entre la première solution proposée et une notation pointée dans notre composant (propriete.state1 = "..."). Nous retombons donc dans les travers évoqués en début de sujet. Cette vision des choses n'engage que moi bien sûr. De mon côté, je n'utilise jamais les états de composants ou du moins je n'utilise jamais de notation pointée directement dans mes composants personnalisés. La seule façon dont j'utilise les états de composants est celle évoquées ici en méthode 1. Ceci dit, j'utilise la méthode 2 autant que faire se peut. ...et vous, comment voyez vous les choses concernant les "components states" ? Merci de m'avoir lu et de votre participation au débat
__________________
Je ne réponds pas aux questions envoyées par mp |
||||||||||||
|
|
10
|
|
|
#2 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 279 ![]() |
Personne n'utilise de composants personnalisés ici ?
__________________
Je ne réponds pas aux questions envoyées par mp |
|
|
00
|
|
|
#3 |
![]() ![]() Jean-Marie MacéIngénieur consultant, leader Flex Inscription : avril 2006 Messages : 2 194 ![]() |
Salut,
alors pour moi les states dont tu parles je les utilises comme des états des vues et les autres comme des états des skins. Oui je sépare le skin de la vue. Une vue est un container et un skin est l'habillage du container. Typiquement j'ai un stack de vue dans un container parent avec pour chacune des vues un state. Et chacune de ces vues à un skin avec des skinState. Par exemple, le skinState peut etre un habillage particulier si l'utilisateur est une femme ou bien un homme. (j'ai donc 2 skinStates 'menState' et 'womenState') et dans mon container des states pour chacune des vues ('loginState', 'viewOneState', ...) les states sont donc plus 'métier'
__________________
![]() Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses Pensez au tag ![]() Mon Blog sur la techno Flex Ma page sur Developpez.com Jim_Nastiq |
|
00
|
|
|
#4 | ||||||||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 279 ![]() |
Salut,
ça se défend ton point de vue c'est vrai. Finalement, pour un composant basique à ce que je comprends, tu n'utilises pas de skin en fait c'est ça ? Tout est externalisé en quelque sorte dans ce que tu appelles la vue ? Pour toi, un skin te permet de "simplifier" le code des states il me semble non ? Par exemple, pour un composant nommé Horloge affichant l'heure et un Label "vous êtes connecté" si on est connecté et rien sinon tu procéderas ainsi ? 2 états de vue : Code :
2 états de vue : Code :
Code :
4 états de vue : Code :
J'ai bien résumé/compris ton point de vue ou non ? Merci de ta participation en tout cas
__________________
Je ne réponds pas aux questions envoyées par mp |
||||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com