Mi sono appena imbattuto in questa vecchia domanda chiedendomi cosa c'è di così male nello stato globale e la risposta più votata e accettata afferma che non puoi fidarti di alcun codice che funzioni con variabili globali, perché qualche altro codice da qualche altra parte potrebbe venire e modificarne la valore e quindi non sai quale sarà il comportamento del tuo codice perché i dati sono diversi! Ma quando lo guardo, non posso fare a meno di pensare che sia una spiegazione molto debole, perché in che modo differisce dal lavorare con i dati archiviati in un database?
Quando il tuo programma funziona con i dati di un database, non ti importa se un altro codice nel tuo sistema lo sta cambiando, o anche se un programma completamente diverso lo sta cambiando, del resto. Non ti importa quali siano i dati; questo è l'intero punto. Tutto ciò che conta è che il tuo codice gestisca correttamente i dati che incontra. (Ovviamente sto sorvolando il problema spesso spinoso della cache qui, ma ignoriamolo per il momento.)
Ma se i dati con cui stai lavorando provengono da una fonte esterna su cui il tuo codice non ha alcun controllo, come un database (o input dell'utente, un socket di rete, o un file, ecc ...) e non c'è niente di sbagliato con quello, allora come sono i dati globali all'interno del codice stesso - su cui il tuo programma ha un grado molto maggiore di controllo - in qualche modo una cosa cattiva quando è ovviamente molto meno cattiva di cose perfettamente normali che nessuno vede come un problema?