Die meisten Programme, die ich schreibe, sind relativ flussdiagrammfähige Prozesse mit einem definierten Start und einem erhofften Ende. Die Probleme selbst können komplex sein, neigen jedoch nicht zu einer zentralen Verwendung von Objekten und einer ereignisgesteuerten Programmierung. Oft stoße ich einfach durch große, verschiedenartige Chargen von Textdaten, um verschiedene Textdaten zu erzeugen. Nur gelegentlich muss ich eine Klasse erstellen: Um beispielsweise Warnungen, Fehler und Debugmeldungen zu verfolgen, habe ich eine Klasse (Probleme) mit einer Instanziierung (myErr) erstellt, von der ich glaube, dass sie ein Beispiel für das Singleton-Entwurfsmuster ist . Als weiteren Faktor sind meine Kollegen eher altschulisch (prozedural) als ich und sind mit der objektorientierten Programmierung nicht vertraut, so dass ich es verabscheue Dinge zu schaffen, die sie nicht durchspielen konnten.Beschreiben Sie Ihre Probleme mit der Minimierung der Verwendung globaler Variablen
Und doch höre ich immer wieder, wie sogar das Singleton Design Pattern wirklich ein Anti-Pattern ist und vermieden werden sollte, weil Globale Variablen schlecht sind.
Geringfügige Funktionen brauchen nur wenige Argumente, die an sie weitergegeben werden und müssen nicht von Konfiguration (unveränderlich) oder Programmstatus (Änderung) wissen - ich stimme zu. Die Funktionen in der Mitte der Kette, die hauptsächlich den Programmablauf steuern, benötigen jedoch eine große Anzahl von Konfigurationsvariablen und einige Programmstatusvariablen. Ich glaube, ein Dutzend oder mehr Argumente an eine Funktion weiterzugeben ist eine "Lösung", aber kaum eine attraktive. Ich könnte natürlich Variablen in ein einzelnes Hash/dict/assoziatives Array stopfen, aber das scheint zu betrügen.
Zum Beispiel die Verbindung mit dem Active Directory, um ein neues Konto zu erstellen, brauche ich solche Konfigurationsvariablen wie ein administrativer Benutzername, ein Kennwort, eine Ziel-OU, einige Standardgruppen, eine Domäne usw. Ich würde diese Argumente übergeben müssen Durch eine Vielzahl von Funktionen, die sie nicht einmal verwenden würden, mische man sie einfach durch eine Kette herunter, die schließlich zu der Funktion führen würde, die sie tatsächlich benötigt.
Ich würde zumindest die Konfigurationsvariablen als konstant erklären, um sie zu schützen, aber meine Sprache der Wahl dieser Tage (Python) bietet keine einfache Möglichkeit, dies zu tun, obwohl Rezepte als Workarounds existieren.
Zahlreiche Fragen zum Stack-Overflow sind auf das Warum gekommen? von der Schlechtigkeit und der notwendigen Meidung, aber nicht oft erwähnen Tipps zum Leben mit dieser quasi-religiösen Einschränkung. Wie haben Sie das Problem der globalen Variablen und des Programmstatus gelöst oder zumindest geschlossen? Wo haben Sie Kompromisse gemacht? Was sind deine Tricks gewesen, abgesehen davon, dass du die Herden von Argumenten zu Funktionen schubst?
Gute Frage - kategorisieren Sie Variablen auf Klassenebene (Mitglied) als globale Variablen? –