Question

Je viens de commencer à utiliser Swiz, et il semble que les forces Swiz vous pour créer des classes avec encapsulation faible. Swiz exige que tous les gestionnaires d'événements publiques afin de servir de médiateur des événements.

On suppose que le composant « A » envoie quelques événements que je veux écouter dans le composant « B ». Traditionnellement, je vais juste ajouter des écouteurs d'événement sur « A » « B » et tous les gestionnaires d'événements en « B » peut être maintenu privé. Toutefois, si, je me sers Swiz, je dois faire tous les gestionnaires, la médiation des événements, public.

Suis-je manque quelque chose ici, est-il un moyen de contourner ce problème. Je vraiment, ne veux pas polluer l'interface publique de ma classe.

Merci.

Était-ce utile?

La solution

Comme je l'ai mentionné sur la liste de diffusion, il n'y a pas moyen de contourner cela, malheureusement. Comme il n'y a aucun moyen d'accéder aux membres privés de cours, la seule façon B peut utiliser des gestionnaires d'événements privés pour les événements de A est si addEventListener () est appelée à partir de B. Comme Swiz est de toute évidence ne fonctionne pas au sein de vos classes, il n'a aucun moyen d'accéder à ces membres.

Swiz vise à maintenir votre code d'application indemne de références (y compris l'héritage) aux classes Swiz que possible. Par conséquent, vous pouvez penser que la configuration de votre application « de l'extérieur ». Contrairement à la machine virtuelle Java, Flash Player permet tout simplement pas accès aux membres privés, donc pour Swiz d'interagir avec votre code, il doit être public.

Autres conseils

Vous pouvez également créer un espace de noms personnalisé qui les rend pas nécessairement public, mais pas non plus privé. J'utilise ce Openflux initialement fait:

[Mediate(event="UserEvent.LOGIN")]
metadata function loginHandler(user:User):void
{
    ... with namespace
}

[Mediate(event="UserEvent.LOGOUT")]
public function logoutHandler(user:User):void
{
    ... without namespace
}

Vous devez alors ajouter use namespace metadata dans la Swiz processeurs , et probablement à leur métadonnées MediateQueue . Tant que l'espace de noms est importé dans les classes correctes, ce qui fait référence à une dynamique méthode fonctionne:

donc dans le procédé de setUpMetadataTag en MediateProcessor (ou au sommet de la classe):

use namespace metadata;
// bean.source[mediateTag.host.name]
// service["loginHandler"] and service["logoutHandler"] both work
addMediatorByEventType( mediateTag, bean.source[ mediateTag.host.name ], eventType );

rend le code propre et garde les choses d'être public. Mais certaines personnes pensent qu'il est trop de travail:)

.

Best, Lance

Pour quelque chose à l'extérieur et découplée de la classe d'invoquer le gestionnaire, la méthode ne peut pas être privé. Donc, vous avez deux choix: les rendre publics et les laisser Swiz médiat (et tirer tous les couplage lâche), ou les garder privés et ne pas utiliser la médiation de l'événement. Si vous pensez que ça vaut le coup (et presque tous), de l'utiliser. Si vous ne faites pas, ne le faites pas.

« Swiz exige que tous les gestionnaires d'événements publiques afin de servir de médiateur des événements. »

C'est vrai, mais la force de Swiz est qu'il ne force pas (plus ou moins) choix de conception sur vous, il fournit simplement des outils puissants (injection de dépendance, la médiation de l'événement, et al) que vous pouvez choisir d'appliquer où vous jugerez utile.

Utilisation Swiz ne nécessite pas l'utilisation du [Mediate] étiquette du tout - vous pouvez toujours utiliser addEventListener () et écouter des méthodes privées comme vous le feriez normalement (je suis sûr que vous êtes bien au courant). Pour autant que je peux dire, la médiation de l'événement Swiz est principalement destiné à être utilisé avec des événements de niveau système / d'application. Si vous appelez des écouteurs d'événement dans un seul composant, ou dans les composants de la famille proche, vous généralement utiliser les écouteurs d'événements standard. Pour communiquer entre les différents composants, autrement-indépendants, vous pouvez gérer le message avec le médiateur de Swiz.

En bref, dans tous les cas où vous avez accès aux écouteurs d'événements privés (à savoir dans les composants proches), vous auriez probablement pas utiliser [Mediate] pour capturer l'événement, et pour que l'auditeur puisse rester privé. Lorsque vous utilisez le [Mediate] balise, le gestionnaire d'événements est généralement dans un endroit complètement séparé dans l'application (par exemple le présentateur -> contrôleur). Où dans tous les cas, ne pouvait pas être pratiquement privé

Je peux être légèrement, mais c'est la façon dont il me semble. Swiz peut encourager encapsulation faible dans certaines situations, mais pour moi, il offre une plus grande modularisation globale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top