2010-03-31 11 views
12

Sto usando C# .NET.Il modo migliore per fornire le impostazioni del software?

Nel mio software sto fornendo la finestra di dialogo delle impostazioni attraverso la quale l'utente può impostare le impostazioni dell'applicazione che voglio salvare su un file.

Requisiti (tipico):

  1. Ogni classe ho definito usa una parte di queste impostazioni. Quindi, questi dovrebbero essere globali per tutte le classi.
  2. Questi dovrebbero essere caricati mentre il software è avviato.
  3. Quando mai l'utente modifica le impostazioni e fa clic su "salva"/"applica". Le impostazioni correnti dovrebbero cambiare.

Mi chiedo quale sia il modo migliore per farlo? Inoltre, qual è il modo migliore per salvare queste impostazioni su disco? Voglio dire, dovrei creare un oggetto di classe e Settings serializzazione a 'settings.dat' o fornire un file strutturato come XML/JSON

Questo è necessario per quasi ogni altro software. Quindi, non c'è alcun modello di design per questo?

EDIT:

Beh, questo è qualcosa che non sapevo. È carino :). Ma dite che mentre l'utente sta usando il software nel mezzo cambia le impostazioni, allora tutti gli altri oggetti che stanno usando queste proprietà globali, Properties.Settings.Default. * Dovrebbero essere cambiati. C'è qualche tipo di meccanismo di notifica? Qualche tipo di evento?

risposta

7

La classe Impostazioni fornita con .Net è molto utile e la utilizzo per la maggior parte dei miei progetti. Quello a cui bisogna stare attenti è che ogni nuova versione dell'applicazione riceve il proprio file di impostazioni, quindi assicuratevi di avere impostazioni predefinite sensibili. Tutte le impostazioni spariranno ogni volta che viene distribuito un nuovo EXE.

Lo stato globale è molto difficile da gestire correttamente, quindi di solito trasferisco le impostazioni pertinenti ai vari oggetti nei loro costruttori o nelle proprietà. E di solito non applico le modifiche alle impostazioni di quegli oggetti, poiché, in molti casi, è molto difficile per un oggetto gestire un'impostazione che cambia in modo intelligente. Piuttosto, uso solo le nuove impostazioni per i nuovi oggetti man mano che vengono creati. Se è necessario applicare immediatamente un'impostazione, è sufficiente scaricare il vecchio oggetto e crearne uno nuovo. Dipende solo dai dettagli dell'applicazione.

Se si dispone di un pulsante Applica nella schermata delle impostazioni, quindi si consiglia di ricaricare e visualizzare tutti i valori dopo averli salvati. In questo modo il display è sicuro di contenere esattamente ciò che viene effettivamente salvato. Questo potrebbe essere importante se vengono analizzate le impostazioni. Gli utenti hanno inserito una combinazione di mese e giorno in un campo particolare e il formato utilizzato era diverso da quello previsto, pertanto il valore salvato non era corretto. Aggiornando lo schermo dopo l'applicazione, questi tipi di errori possono essere resi evidenti.

Spero che questo aiuti!

+1

Puoi utilizzare il metodo di aggiornamento (http://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.upgrade.aspx) per spostare le impostazioni dalla versione precedente a quella più recente. Assicurati di chiamarlo solo una volta. – Giorgi

+0

@Giorgi - Interessante! Dovrò fare una prova. –

+0

Aggiungi questo link http://msdn.microsoft.com/en-us/library/aa730869%28VS.80%29.aspx per rispondere e modificare la risposta come da commento di Giorgi. In modo che io possa accettarlo come risposta. – claws

13

. I progetti Net hanno già la nozione di Impostazioni, con scope per l'utente o l'applicazione, che soddisferanno tutti i requisiti sopra indicati. Esistono classi per leggere e scrivere le impostazioni. Consiglio vivamente di guardarli invece di arrotolare qualcosa da soli.

Using Settings in C#

È possibile utilizzare le impostazioni in una varietà di tipi di progetto, anche se in alcuni tipi di progetti come progetti ASP.NET, le impostazioni a livello utente potrebbero non essere disponibili.

+1

@womp, l'aggiornamento tra le diverse versioni può diventare molto complicato. – Giorgi

+0

Di sicuro - il controllo delle versioni in generale è complicato, e questo è solo un altro caso. Questo dovrebbe comunque risparmiare molto tempo in OP. – womp

+0

dove sono memorizzate queste impostazioni? all'interno dell'assemblaggio di quel progetto (dll/exe)? o verrà memorizzato in una sorta di file settings.settings che dovrei distribuire insieme al mio software. – claws

3

Tu e womp sono sia a destra:

è necessario creare una classe impostazioni che è una facciata sulle impostazioni .NET. In questo modo ottieni il meglio da entrambi i mondi: la testabilità di una soluzione laminata a mano e la facilità di implementazione tipicamente associata a Microsoft Silver Bullets.

0

Io personalmente andare via Properties.Settings. Aggiungi un file di impostazioni alla cartella Proprietà della tua app. Ciò ti consente di aggiungere facilmente elementi al file app.config dell'applicazione. Esiste una classe .net integrata che è possibile utilizzare per leggere/scrivere i valori trovati nel file delle impostazioni. È quindi possibile scrivere una classe wrapper di piccole dimensioni che incapsula tale funzionalità o semplicemente utilizzare la versione .net integrata in tutto il luogo.

Personalmente creerei una classe Singleton thread-safe che usa la classe del piccolo wrapper su quella in .net. Sì, è un lavoro extra ma è una piccola quantità e ti dà un grande potere nella tua app per un po 'di lavoro.

Edit: Sorry dimenticato di includere il link impostazioni MSDN.

http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

0

Come altri hanno suggerito di usare la funzione Impostazioni è la strada da percorrere. Le impostazioni forniscono anche eventi quando vengono aggiornate in modo da poterle gestire e intraprendere le azioni necessarie. È inoltre possibile utilizzare il metodo Upgrade per spostare le impostazioni dalla versione precedente a quella più recente. Assicurati di chiamarlo solo una volta (probabilmente dal programma di installazione).

Le impostazioni possono anche essere associate ai controlli in modo da non doverle mappare manualmente dai controlli alle impostazioni.

Problemi correlati