È da un po 'che rifletto sui file di configurazione e sulla loro relazione con il codice e, a seconda del giorno e della direzione del vento, le mie opinioni sembrano cambiare. Tuttavia, continuo a tornare alla consapevolezza che ho avuto durante l'apprendimento del Lisp: c'è poca differenza tra dati e codice. Questo sembra doppiamente vero per i file di configurazione. Se guardato nella giusta luce uno script Perl è poco più di un file di configurazione per Perl. Ciò tende ad avere conseguenze piuttosto pesanti per attività come QA e divisioni del lavoro come chi dovrebbe essere responsabile della modifica dei file di configurazione.
Il passaggio dal file di configurazione al linguaggio completo è generalmente lento e sembra essere guidato dal desiderio di avere un sistema generico. La maggior parte dei progetti sembra iniziare in piccolo con alcuni elementi di configurazione come dove scrivere i log, dove cercare dati, nomi utente e password, ecc. Ma poi iniziano a crescere: le funzionalità iniziano a poter essere attivate o disattivate, i tempi e l'ordine delle operazioni iniziano a essere controllati e, inevitabilmente, qualcuno vuole iniziare ad aggiungervi logica (es. utilizzare 10 se la macchina è X e 15 se la macchina è Y). A un certo punto il file di configurazione diventa un linguaggio specifico del dominio, e uno scritto male.
Ora che ho divagato per preparare il palco, ecco le mie domande:
- Qual è il vero scopo di un file di configurazione?
- Dovrebbe essere fatto un tentativo per mantenere semplici i file di configurazione?
- Chi dovrebbe essere responsabile per le modifiche (sviluppatori, utenti, amministratori, ecc.)?
- Devono essere controllati alla fonte (vedere la domanda 3)?
Come ho detto prima, le mie risposte a queste domande cambiano costantemente, ma in questo momento sto pensando:
- per consentire a un non programmatore di modificare rapidamente grandi blocchi di comportamento
- sì, tutto ciò che non è a grana grossa dovrebbe essere in codice
- gli utenti dovrebbero essere responsabili dei file di configurazione ei programmatori dovrebbero essere responsabili di un livello di configurazione tra i file di configurazione e il codice che fornisce un controllo più fine dell'applicazione
- no, ma lo strato intermedio a grana più fine dovrebbe essere