Я вже деякий час розмірковую над конфігураційними файлами та їхнім відношенням до коду, і залежно від дня та напрямку вітру мої думки, здається, змінюються. Все більше і більше, хоча я постійно повертаюся до усвідомлення, яке я вперше здобув під час вивчення Lisp: між даними та кодом мало різниці. Це здається подвійним для конфігураційних файлів. Якщо розглянути його у правильному світлі, сценарій Perl - це трохи більше, ніж конфігураційний файл для perl. Це, як правило, має досить важкі наслідки для таких завдань, як забезпечення якості та розподіл праці, наприклад, хто повинен відповідати за зміну конфігураційних файлів.
Перехід від конфігураційного файлу до повноцінної мови, як правило, відбувається повільно і, здається, зумовлений бажанням мати загальну систему. Здається, більшість проектів починаються з невеликих кількох елементів конфігурації, наприклад, де писати журнали, де шукати дані, імена користувачів, паролі тощо. Але потім вони починають рости: функції починають вмикати або вимикати, таймінги та порядок операцій починають контролюватися, і, неминуче, хтось хоче почати додавати до цього логіку (наприклад, використовуйте 10, якщо машина X, і 15, якщо машина Y). У певний момент файл конфігурації стає мовою для конкретного домену, причому погано написаною.
Тепер, коли я зайнявся підготовкою сцени, ось мої запитання:
- Яка справжня мета конфігураційного файлу?
- Чи слід намагатися спростити конфігураційні файли?
- Хто повинен нести відповідальність за внесення змін до них (розробники, користувачі, адміністратори тощо)?
- Чи повинні вони контролюватися джерелами (див. Питання 3)?
Як я вже говорив раніше, мої відповіді на ці питання постійно змінюються, але зараз я думаю:
- щоб дозволити непрограмістам швидко змінювати великі шматки поведінки
- так, все, що не є грубозернистим, повинно бути в коді
- користувачі повинні нести відповідальність за конфігураційні файли, а програмісти повинні відповідати за рівень конфігурації між конфігураційними файлами та кодом, що забезпечує більш чіткий контроль програми
- ні, але тонший зернистий середній шар повинен бути