2010-09-17 5 views
2

Dans mon expérience, la plupart des fonctions JS, des fonctions constructeur ou des fonctions de modèle de module sont déclarées comme globales ou sont liées à un objet d'espace de noms global. Dans tous les cas, ces identifiants sont globalement accessibles.Les fonctions doivent-elles être déclarées avec une portée minimale?

De toute ligne de code dans votre système, vous pouvez avoir:

mod1 = somepackage.SomeModule(); // couple to me! 

Voici un exemple rapide JS, mais dans d'autres langues l'idée applique. Etant donné que les globales sont considérées comme dangereuses, dans quelle mesure la visibilité des fonctions/classes devrait-elle être restreinte? Quels sont les compromis?

Ma question est un peu motivé par: 'when are globals acceptable', 'alternatives to globals' et 'return of the globals'

Merci!

Répondre

2

Eh bien, il est toujours préférable de commencer avec une portée minimale que vous pouvez augmenter en cas de besoin. Mais si vous gardez les choses publiques dans un premier temps, il sera vraiment très difficile (presque impossible) de minimiser la portée car vous devrez refactoriser/réparer d'autres codes dans le processus.

Ceci est l'une des principales choses lors de la conception d'une API. De plus, garder la portée minimale est également une bonne décision de conception. De cette façon, vous pouvez gérer l'utilisation des classes. Par exemple, dans le cas d'une mise en forme d'usine, vous conservez la portée par défaut du constructeur, de sorte que seul le code de ce package particulier (c'est-à-dire votre implémentation de classe d'usine) peut créer l'objet.

+0

Je suis d'accord pour réduire la portée est une bonne décision. Ma préoccupation est que, par rapport à une variable portée à un bloc ou une fonction, une variable portée à un paquet est accessible à partir de beaucoup plus de lignes de code. Cela me fait me demander si les constructeurs devraient être définis au plus près de leur site de première utilisation. – James

+2

Je pense que les variables doivent être privées à moins de raisons impérieuses de ne pas le faire (héritage, etc.) –

+0

Il semble que la réduction de la portée réduise également la réutilisabilité, nécessitant des changements de signature de méthode partout où l'usine pourrait être transmise. – James

Questions connexes