Quando utilizzare le costanti e i file di configurazione per mantenere la configurazione

19

Spesso combatto con me stesso sull'opportunità di inserire determinate chiavi nel mio web.config o in una classe Constants.cs o qualcosa del genere.

Ad esempio, se volessi archiviare chiavi specifiche per ogni caso, potrei memorizzarlo e prenderlo dalla mia configurazione web tramite chiavi personalizzate o consumarlo facendo riferimento a una costante nella mia classe di costanti.

Quando vorresti usare le costanti con le chiavi di configurazione?

Questa domanda si applica davvero a qualsiasi lingua che penso.

    
posta WeDoTDD.com 23.11.2011 - 07:16
fonte

6 risposte

20

Personalmente userò solo le costanti come valori predefiniti, e lascerò che siano sovrascritte dai valori di un file di configurazione.

Se l'applicazione utilizza gli argomenti della riga di comando, quelli a loro volta sovrascriveranno i parametri del file di configurazione.

    
risposta data 23.11.2011 - 07:41
fonte
3

Il valore nel file di configurazione è più difficile da mantenere del valore nella classe delle costanti, perché il compilatore non verifica che esista e sia di tipo corretto, l'IDE di solito non fornisce assistenza per il codice e anche perché è un'altra sintassi che hai per passare a durante la programmazione.

Quindi suggerirei di mettere:

  • Valori che saranno uguali in tutte le installazioni come costanti nel codice. Ci sono alcuni vantaggi nel metterli in una classe di costanti (puoi facilmente provare vari valori per vedere come funzionano) e inserirli nel modulo che li usa (non devi aprire ancora un altro file quando modifichi quel modulo e evitando un file che tutti avrebbero modificato causando conflitti nel controllo della versione).
  • Valori che (possono) devono essere cambiati per installazione nel file di configurazione. E probabilmente vuoi inserire il valore predefinito nel codice in ogni caso, quindi se il valore non è impostato nella configurazione, l'applicazione continua (in qualche modo) funziona.
risposta data 23.11.2011 - 07:51
fonte
3

La modifica delle costanti richiede la ricostituzione dell'applicazione nella maggior parte dei casi. In altre parole, le costanti rimangono costanti quando qualcuno non ha accesso al codice.

Quindi qualsiasi informazione che l'utente finale deve fornire (e deve cambiare) dovrebbe andare nei file di configurazione. La maggior parte degli altri ha bisogno di andare sotto costanti. Tuttavia, ci devono essere valori predefiniti legittimi o gestione delle eccezioni degli errori se i file di configurazione sono danneggiati.

Elementi che non fanno parte dell'astrazione dell'oggetto (cioè se le costanti che non devono essere modificate da oggetti esterni (chiamanti) sono probabilmente nascoste e in sostanza significano che sarebbero migliori come costanti private dei file di configurazione .

Quando ci sono molti elementi di configurazione che appartengono a oggetti diversi, non correlati tra loro, e quando così tanti oggetti hanno bisogno di estrarre (stessi o propri) file di configurazione, è probabile che queste cose debbano essere costanti.

    
risposta data 23.11.2011 - 07:52
fonte
1

Una semplice regola empirica consiste nel creare costanti quando sai che lavorerai con un set fisso di valori che sai possono essere applicati per qualsiasi contesto dato senza bisogno di cambiare; fornire configurazioni esterne per tutto il resto.

Un buon esempio di costanti sarebbe se tutte le forme con cui hai lavorato potessero essere SQUARE o ROUND . Nella maggior parte delle lingue, sarai in grado di sfruttare il fatto che questo valore non cambia nel tempo, assegnandolo una sola volta e ottimizzandone l'accesso.

Le configurazioni esterne sono necessarie quando è necessario recuperare il valore in modo dinamico perché non si può assumere in anticipo il valore con cui si lavorerà, ma ciò non significa che si debba fare alcun compromesso in termini di prestazioni: per i valori di configurazione si aspettati di essere presente, se fatto correttamente, paghi solo il prezzo di recuperarli una volta e comunque ottieni tutti i benefici.

    
risposta data 23.11.2011 - 10:19
fonte
1

Puoi anche usare semplicemente questo modello di progettazione: "convenzione sulla configurazione".

link http://en.wikipedia.org/wiki/Convention_over_configuration

    
risposta data 29.11.2011 - 09:49
fonte
0

Una costante per definizione è una posizione di memoria per un valore che non dovrebbe cambiare (come PI).

Immagino tu intenda "parametro" e non una costante

Oltre a quanto detto, si noti che l'esposizione delle variabili all'input dell'utente dal file di configurazione può danneggiare l'applicazione.

Se possibile, non esporre i valori nel file di configurazione senza convalidarli in codice per ottenere un controllo di integrità. Inoltre, ti suggerisco di non inserire parametri di regole di business (come il massimo stipendio, ecc.) Nei file di configurazione e di non usare costanti per quelli. Tali valori devono essere archiviati nel database con le definizioni di tabella appropriate in modo che venga applicata una certa sicurezza al momento della modifica e che sia possibile creare automaticamente versioni dei valori dei dati (utilizzando proc memorizzati o registri db). Naturalmente, ciò dipende dalla sensibilità della tua applicazione.

Se usi mai i file di configurazione per archiviare i dati, assicurati di modificarli.

    
risposta data 29.11.2011 - 10:17
fonte

Leggi altre domande sui tag