Ho una piccola applicazione python (circa 6000 loc), dove tengo le mie impostazioni in un file separato modulo, settings.py. Quando l'applicazione è cresciuta, ho iniziato ad aggiungere test. Ora dopo aver avuto sempre più test, e cercando di testare con impostazioni diverse, trovo che il modulo l'approccio non è stata una grande idea, in quanto non molto flessibile - devo sempre ragionare su dove e quando settings.py viene importato, in modo da eseguire le mie modifiche su posto giusto ecc.
Ora ho un nuovo approccio, che usa ancora settings.py, ma verrà importato solo una volta e trasformato in un oggetto di configurazione che posso passare e modificare localmente senza influenzare nient'altro. Ora potrei avere diverse versioni di settings.py, il costruttore di oggetti di configurazione accetta un nome file come argomento facoltativo. Quindi penso di essere meglio preparato per i miei test.
Ora viene il refactoring, e bevor mi immergo in esso, mi piacerebbe avere un secondo (o terzo;)) parere su come affrontare il refactoring. Ecco la mia idea:
- Tutte le funzioni e i metodi che utilizzano il modulo delle impostazioni ottengono un argomento di parole chiave per a modulo impostazioni (impostazioni = Nessuno).
- Decorare tutte queste funzioni con un decoratore che inietta l'oggetto delle impostazioni, se presente non dato dal chiamante originale. Inoltre, avvisare dell'iniezione, in modo che io ne sia consapevole di dove ho bisogno di modificare la chiamata.
A questo punto, dovrei ancora avere un codice funzionante e posso iniziare a cercare i chiamanti. Inoltre, i passaggi 1 e 2 potrebbero essere fatti da uno script, per ridurre il tedio. Una volta eliminati tutti gli avvisi correggendo le chiamate, posso rimuovere il decoratore.
In questo modo, nel mio modo di pensare, non ho mai uno stato se avessi bisogno di cambiare un sacco di cose contemporaneamente per avere un codice funzionante, quindi avere un buon viaggio.
Sembra un approccio ragionevole? O sto pensando troppo a questo? O perdere nessuno punti importanti?