La plupart des programmes que j'écris sont des processus relativement à flux, avec un début défini et une fin espérée. Les problèmes eux-mêmes peuvent être complexes mais ne se prêtent pas facilement à l'utilisation centralisée des objets et à la programmation événementielle. Souvent, je suis simplement en train de parcourir de nombreux lots de données textuelles variées pour produire différentes données textuelles. Par exemple, pour suivre les avertissements, les erreurs et le message de débogage, j'ai créé une classe (Problems) avec une instanciation (myErr), ce que je crois être un exemple du modèle de conception Singleton. . Comme autre facteur, mes collègues sont plus old school (procédural) que moi et ne connaissent pas la programmation orientée objet, donc je répugne à créer des choses qu'ils ne pourraient pas résoudre. Et pourtant j'entends, encore et encore, que même le motif de conception de Singleton est vraiment un anti-pattern et qu'il devrait être évité car Global Variables Are Bad.Veuillez décrire vos difficultés en minimisant l'utilisation des variables globales
Les fonctions mineures ont besoin de peu d'arguments et n'ont pas besoin de connaître la configuration (immuable) ou l'état du programme (changement) - Je suis d'accord. Cependant, les fonctions au milieu de la chaîne, qui contrôlent principalement le déroulement du programme, ont besoin d'un grand nombre de variables de configuration et de certaines variables d'état du programme. Je crois que passer une douzaine ou plus d'arguments à une fonction est une «solution», mais guère attrayante. Je pourrais, bien sûr, entasser des variables dans un seul tableau de hachage/dict/associative, mais cela ressemble à de la triche. Par exemple, en me connectant à Active Directory pour créer un nouveau compte, j'ai besoin de telles variables de configuration comme nom d'utilisateur administratif, mot de passe, unité d'organisation cible, certains groupes par défaut, domaine, etc. Je devrais passer ces arguments par le biais d'une variété de fonctions qui ne les utiliseraient même pas, il suffit de les mélanger à travers une chaîne qui mènerait finalement à la fonction qui en a réellement besoin. Je voudrais au moins déclarer les variables de configuration comme étant constantes, pour les protéger, mais la langue de mon choix de nos jours (Python) ne fournit pas une manière simple de le faire, bien que des recettes existent comme solutions de contournement.
Nombreuses questions de dépassement de pile ont frappé sur le pourquoi? de la méchanceté et l'évitement requis, mais ne mentionnent pas souvent des conseils sur la vie avec cette restriction quasi-religieuse. Comment avez-vous résolu, ou au moins fait la paix avec, la question des variables globales et de l'état du programme? Où avez-vous fait des compromis? Quelles ont été vos astuces, en dehors du fait de déplacer des groupes d'arguments vers des fonctions?
Bonne question - catégorisez-vous les variables de niveau classe (membre) comme variables globales? –