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