He estado reflexionando sobre los archivos de configuración y su relación con el código durante un tiempo y, dependiendo del día y la dirección del viento, mis opiniones parecen cambiar. Más y más, aunque sigo volviendo a la conclusión que tuve por primera vez mientras aprendía Lisp: hay poca diferencia entre los datos y el código. Esto parece doblemente cierto para los archivos de configuración. Cuando se mira con la luz adecuada, un script de Perl es poco más que un archivo de configuración para Perl. Esto tiende a tener consecuencias bastante graves para tareas como el control de calidad y las divisiones de trabajo, como quién debería ser responsable de cambiar los archivos de configuración.
El paso del archivo de configuración al lenguaje completo es generalmente lento y parece estar impulsado por el deseo de tener un sistema genérico. La mayoría de los proyectos parecen comenzar pequeños con algunos elementos de configuración como dónde escribir registros, dónde buscar datos, nombres de usuario y contraseñas, etc. Pero luego comienzan a crecer: las características comienzan a poder activarse o desactivarse, los tiempos y el orden de las operaciones comienzan a ser controlados e, inevitablemente, alguien quiere comenzar a agregarle lógica (por ejemplo, use 10 si la máquina es X y 15 si la máquina es Y). En cierto punto, el archivo de configuración se convierte en un lenguaje específico de dominio y, además, en uno mal escrito.
Ahora que he divagado para preparar el escenario, estas son mis preguntas:
- ¿Cuál es el verdadero propósito de un archivo de configuración?
- ¿Se debe intentar mantener los archivos de configuración simples?
- ¿Quién debería ser responsable de realizar cambios en ellos (desarrolladores, usuarios, administradores, etc.)?
- ¿Deberían ser controlados en fuente (ver pregunta 3)?
Como dije antes, mis respuestas a estas preguntas cambian constantemente, pero ahora mismo estoy pensando:
- Permitir a los no programadores cambiar rápidamente grandes porciones de comportamiento
- sí, todo lo que no sea de grano grueso debe estar en código
- los usuarios deben ser responsables de los archivos de configuración y los programadores deben ser responsables de una capa de configuración entre los archivos de configuración y el código que brinde un control más detallado de la aplicación
- no, pero la capa intermedia de grano más fino debe ser