In generale, le statistiche globali sono scoraggiate. Ma alcune cose sono davvero "globali" nel senso che un singolo valore o impostazione deve essere condivisa da molti pezzi di codice diversi. A volte, come sottolinea Karl, condividere i dati tra diverse aree della tua applicazione può significare che la tua applicazione è strutturata male. Se hai 26 file sorgente (denominati AZ per semplicità) e 10 globali e 5 di questi "globali" sono utilizzati solo dai file C, H e N, allora potresti voler guardare C, H e N per vedere cosa altrimenti hanno in comune e vedono se ha senso unire C, H e N e rendere privata la metà dei tuoi ex globals.
D'altra parte, alcune informazioni potrebbero essere veramente globali, come "nome-applicazione" o "modalità-tutto-app-in-speciale-test". Queste cose possono essere utilizzate nella maggior parte dei file dell'applicazione. Alcuni test per buoni globals sono:
-
Il valore è immutabile una volta impostato (buono) o devi preoccuparti di una parte dell'applicazione che la modifica in fase di esecuzione e un'altra parte che ottiene il valore precedente per errore (errata)?
-
È veramente globale - un singolo valore che deve essere utilizzato da diverse sezioni indipendenti della tua applicazione? Ovviamente vuoi eliminare le dipendenze non necessarie, ma alcune dipendenze sono necessarie.
-
Non essere un idiota. Ho sentito storie di persone che rendono "attualmente loggato" un globale, limitando così l'applicazione web a un singolo utente loggato. Questo tipo di global è troppo stupido per essere chiamato male, ma succede.
Ad esempio, quando pronunci "nomi di sessione" che potrebbero significare due cose:
GOOD Global:
// Key used to look up number of items in individual user's shopping cart
// Each user's session has a hashtable of values and this is better than
// hard-coding the "numCartItems" string each time you use it because
// the compiler will catch a typo in the NUM_CART_ITEMS symbol, but not
// in a string:
String NUM_CART_ITEMS = "numCartItems";
BAD Global:
// Stores number of items in individual user's shopping cart
// but puts everyone's items in the same cart - OOPS!
int NUM_CART_ITEMS = 0;