Quindi ... Abbiamo questo progetto abbastanza complesso (~ 10k LOC, ma c'è un codice duplicato quindi è difficile da dire) con centinaia di variabili globali. Il progetto ha più dipendenze da altri progetti e molti altri progetti dipendono anche da questo. Ho principalmente ereditato la responsabilità di refactoring solo una parte di questo progetto da solo, una "sezione chiusa" di moduli. Nessuno degli sviluppatori originali rimane.
Ho escogitato un modo per strutturare le routine in classi (suddividendo megamoth , formando alcune gerarchie di classi , una piccola strategia qua e là, niente di stravagante (spero), l'obiettivo è rendere più semplice per gli altri sviluppatori aggiungere funzionalità e rendere possibile l'aggiunta di test di unità adeguati).
Le mie nuove classi forniscono calcoli applicati agli array di dati attualmente globali che vengono aggiornati e i calcoli stessi devono mantenere uno stato (una somma, l'ultimo valore dell'ultimo vettore elaborato, ecc.). Potresti vederli come funtori.
Tuttavia non sono sicuro su come gestire i globals. Non penso che sarò in grado di trasformare tutti i globali in non globali a causa delle dipendenze da altri moduli, che non ho intenzione di ridefinire solo ora. Inoltre, molte delle mie nuove classi dovranno condividere i dati. Quindi, posso ...
- Per le globali che non sono condivise tra le mie nuove classi, lasciale così come sono. Stavo pensando di utilizzare un registro , o almeno usare alcune # define o altre variabili per limitare l'ambito e fornire il contesto ovunque siano utilizzati.
- Per i globals che saranno condivisi tra le mie nuove classi, puoi creare una classe base con i riferimenti, o usare un Singleton per passarli, o una combinazione di entrambi.
Non sono sicuro che l'utilizzo di questi modelli farà più male che bene.
Quindi la mia domanda è: cosa c'è di meglio, vivere con le variabili globali esistenti o regolarle in modo aggressivo con modelli come Singleton o Registry? Hai qualche suggerimento su questi schemi o hai uno schema migliore?