Quando e come applicare le impostazioni dell'applicazione in .Net

1

So che posso accedere alle impostazioni dell'applicazione in .Net utilizzando Properties.Settings.Default.aSetting .

Qual è il modo migliore per applicarli:

  1. Per leggerli direttamente nella funzione su cui si basa loro. Questo approccio elimina alcune proprietà di classe o parametri di funzione che altrimenti vengono utilizzati per passare le impostazioni; la funzione potrebbe perdere la sua flessibilità per essere utilizzata con altri parametri rispetto alle impostazioni, ma ha questo vantaggio che vengono applicate quando l'utente le modifica nel modulo delle impostazioni.
  2. Definisci e imposta variabili e parametri membro corrispondenti in classi o funzioni. Quindi, come posso applicarli dopo che l'utente ha modificato un'impostazione mentre l'oggetto dipendente è già stato inizializzato?
posta Ahmad 06.03.2015 - 16:46
fonte

2 risposte

1

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?

    
risposta data 06.03.2015 - 17:57
fonte
1

Sconsiglio vivamente di usare Properties.Settings.Default.aSetting dappertutto.

Se lo fai

La definizione e l'impostazione delle variabili e dei parametri dei membri in classi o funzioni non è molto bella o perché dovresti effettivamente trovare una sorta di meccanismo osservatore / osservato (editore / sottoscrittore) per essere in grado di rispondere ai cambiamenti nelle impostazioni 'valori.

C'è una terza opzione.

Isolare tutto il codice dall'uso di Properties.Settings.Default.aSetting avvolgendolo in una classe definita dall'utente. Dai a quella classe le impostazioni di cui il tuo software ha bisogno come proprietà. Il getter e il setter per ognuna di queste proprietà legge e scrive nel membro corrispondente in Properties.Settings.Default.aSetting .

Se assicuri che il resto del codice riceva un riferimento a un'istanza della tua classe wrapper quando deve recuperare o archiviare un'impostazione, quindi

  • Solo la tua classe wrapper dipende da Properties.Settings.Default.aSetting che richiede test di integrazione.
  • Tutto il tuo altro codice può essere testato con test di unità veloci e veloci.

Un esempio di codice che utilizza C # di questo approccio può essere trovato sul mio blog: Property.Settings.Default rende difficile testare l'unità con qualsiasi metodo che lo utilizza

    
risposta data 03.04.2015 - 13:11
fonte

Leggi altre domande sui tag