Il grande valore delle impostazioni dell'applicazione in .NET (chiamate "Impostazioni dell'applicazione Windows Form") ) è che forniscono la persistenza automatica delle impostazioni, che possono essere configurate per utente.
Per questo motivo, li uso solo nel caso di un'applicazione rich client, in cui ho bisogno che l'utente configuri alcune impostazioni che dovrebbero persistere quando l'utente avvia nuovamente l'applicazione. Sono definiti solo dal progetto dell'applicazione, mai da una libreria.
Quando l'applicazione è in esecuzione, la userò solo due volte:
- All'avvio dell'applicazione, ho letto l'oggetto
Settings.Default
e ho inserito tutti i valori rilevanti nel mio oggetto di configurazione, che è quindi l'unico utilizzato dall'applicazione;
- Quando voglio salvare le impostazioni (all'uscita dell'applicazione, quando l'utente modifica le impostazioni, ecc.), scrivo nell'oggetto
Settings.Default
i valori di configurazione dal mio oggetto di configurazione, quindi chiamo Save()
su di esso;
Come per il tuo dilemma (tra "usare un oggetto" e "passare i valori di configurazione), possono essere risolti da un oggetto di configurazione personalizzato, mutabile:
- Il resto dell'applicazione passa solo l'oggetto di configurazione (o parte di esso), senza sapere da dove proviene (ovvero, nessun componente deve essere accoppiato alla configurazione accedendo come una proprietà statica); / li>
- Le modifiche apportate dall'utente mentre l'applicazione è in esecuzione vengono inviate al mio oggetto di configurazione e il resto dell'applicazione è in grado di leggere le modifiche all'oggetto di configurazione nel momento in cui si verificano;
Una cosa che potresti voler fare è, invece di copiare i dati dal tuo modello al tuo oggetto, è definire un'interfaccia di configurazione, che sarebbe poi implementata dalla classe Properties.Settings. Tuttavia questo può diventare più complesso se hai nidificato oggetti complessi nelle tue impostazioni.
E se hai molte impostazioni di configurazione, dovresti definire più tipi per questo - non c'è ragione per il codice che richiede a un server HTTP di avere accesso al colore della finestra dell'utente.
Inoltre, tieni presente che l'utilizzo della proprietà statica Properties.Settings.Default
ricade direttamente nel caso della domanda:
Is a single config object a bad idea?