La mia applicazione ha un file di configurazione e una finestra "Impostazioni". Quando l'utente conferma le modifiche in questa finestra, vengono applicate e scritte nel file di configurazione.
Queste impostazioni sono spesso modificate e referenziate nel mio programma. Sto cercando di capire come modellare l'accesso e la manipolazione di queste impostazioni. Da un lato, non posso fare riferimento direttamente agli elementi della GUI, sembra proprio una pessima pratica. D'altra parte non riesco a continuare a leggere e scrivere sul file di configurazione perché non voglio che certe modifiche alle impostazioni vengano mantenute, ad es. il nome utente corrente dell'utente collegato deve essere memorizzato da qualche parte; Non riesco a memorizzarlo nel file di configurazione perché non voglio che l'applicazione "ricordi" l'utente che ha effettuato l'accesso al sistema.
Quindi la soluzione ha un oggetto ConfigObj
, contenente tutte le impostazioni del programma, che è accessibile a tutti i moduli del codebase? È una soluzione comune?
Ma c'è un problema che non so come risolvere, dimostrato nel seguente scenario:
- Il programma parte, l'oggetto
ConfigObj
viene inizializzato con il file di configurazione. - L'utente apre la finestra "Impostazioni". I controlli della GUI sono popolati con i valori di
ConfigObj
. - Uno dei valori nella finestra "Impostazioni" è "Porta COM" e, se l'utente lo modifica e fa clic su "Salva impostazioni", il suo valore verrà scritto su
ConfigObj
e sul file di configurazione. - L'utente chiude la finestra "Impostazioni" e apre un'altra finestra "Trova porta USB". Questa finestra trova una porta COM disponibile e la assegna a
ConfigObj.Port
. Questa modifica è piuttosto temporanea e non viene scritta nel file di configurazione, ma ora la porta selezionata a livello globale per l'applicazione è impostata su questo e altre funzioni dipendono da questo valore. - Ora l'utente apre nuovamente la finestra "Impostazioni": il programma dovrebbe visualizzare le impostazioni correnti del programma, cioè cosa c'è in
ConfigObj
, ma come fa a saperlo invece di compilare dal file di configurazione come nel passaggio 1?
Suppongo di poter confrontare tutti i valori tra il file di configurazione e ConfigObj
, ma esiste un modo più corretto? Qual è il modo più pulito per gestire la configurazione a livello di applicazione?