2010-12-15 3 views
0

Outre les collisions de noms de classes possibles, y aurait-il des problèmes ou des effets secondaires de la création d'une classe de niveau supérieur (sans nom de package) avec un nom tel que "Tracer" dans ActionScript 3? Je veux garder un niveau de classe tel que je n'ai pas besoin d'utiliser les instructions d'import dans mon code. Jusqu'à présent, je n'ai eu aucun problème.Effets secondaires de la création de classe de niveau supérieur dans AS3?

Répondre

2

La meilleure pratique consiste à utiliser un package chaque fois que nécessaire. Si ce que vous construisez est un utilitaire, il est préférable de le mettre dans un paquet util que de laisser le niveau supérieur.

Si vous développez quelque chose qui pourrait être considéré comme fonctionnalités de base, il n'y a pas de problème dans la mise en œuvre d'un haut niveau membre.

La dernière chose à planifier est réutilisable. Si vous savez que vous construisez quelque chose que vous ne réutiliserez jamais (classes d'implémentation finales), ne vous inquiétez pas trop d'en faire une classe de haut niveau, car elle devrait continuer à fonctionner une fois que vous aurez compilé le swf. .

Si, au contraire, vous faites une fonctionnalité que vous souhaitez réutiliser comme cadre, vous êtes probablement mieux mettre un cadre de niveau membre de flexibilité avec le développement futur.

+0

Merci. Tracer remplace la commande de trace. Tracer trace, reroute, enregistre et distribue les événements pour les appels à Tracer.write (... args) et Tracer.writeError (e: Error). Cela fait partie d'un framework (un système d'exploitation basé sur Flash [shell/gui/dock-contrôles/net-transaction, etc.]), Compilé dans un SWC réutilisable. Tracer est un cas particulier, car il pourrait être utilisé n'importe où de façon transitoire, donc je pense que cela a du sens en tant que classe de premier niveau qui n'a pas besoin d'une déclaration d'importation.J'ai posté la mise en œuvre de Tracer ici si vous êtes intéressé: http://stackoverflow.com/questions/715738/creating-a-custom-trace-class-in-as3/4453850#4453850 – Triynko

+0

Marqué Réponse: "... il n'y a pas de problème dans mettre en place un membre de haut niveau. " [autre que les collisions de noms possibles comme je l'ai mentionné] – Triynko

2

La réponse de zzzzBov est un bon conseil. Mais pour répondre explicitement à votre question: les collisions de noms possibles sont en effet le seul effet secondaire de ce que vous faites.

+0

+1. Merci pour la réponse explicite. Une autre réponse dit qu'il n'y a pas d'autres problèmes, mais avec un ton conditionnel. C'est bon à savoir. Aimez votre Gecko btw! – Triynko

1

Je suis sur le point de décrire un problème possible auquel j'ai pensé, et je le publie parce que techniquement il ne s'agit pas d'une collision de noms (le casse-lettres est différent). Supposons que vous ayez une classe de niveau supérieur qui partage le nom d'un package de niveau supérieur en dehors d'une différence dans les lettres (par exemple "flash", "fl", "com" ou un package personnalisé). . Si vous tapez quelque chose comme "var x:" puis essayez de taper un nom de classe complet ... alors le moteur d'achèvement de code dans un programme comme FlashDevelop sera par défaut à votre classe "Flash" (si elle existe), plutôt que le paquet "flash" que vous essayez de taper. C'est extrêmement énervant, surtout parce que ça fait un peu de bon sens que ça fonctionne de cette façon, et ça doit coder l'un ou l'autre :(

Alors soyez très prudent en nommant les classes de haut niveau quelque chose qui s'écrit comme un nom de paquet (de premier niveau ou autre)

1

J'ai eu une classe nommée Vector dans un paquet personnalisé et en utilisant flash 9 et tout fonctionnait parfaitement jusqu'à ce que je devais utiliser flash 10 pour enregistrer des fichiers le problème était que je n'a pas pu créer une instance de ma classe Vector due à une erreur TypeError: Erreur # 1007: Instanciation tentée sur un non-constructeur La seule façon de le réparer était de changer le nom de la classe AS, heureusement la liaison pour la classe backend fonctionne avec le vecteur de classe de mon Java.

Il semble que Flash ne prenne pas en charge le package de classe pour les classes de niveau supérieur.

J'espère que cela aidera quelqu'un, même lorsque la date de cette question est il y a presque 2 ans.

Questions connexes