Я некоторое время обдумывал конфигурационные файлы и их связь с кодом, и в зависимости от дня и направления ветра моё мнение, кажется, меняется. Хотя я все больше и больше возвращаюсь к осознанию, которое я впервые испытал при изучении Lisp: между данными и кодом мало различий. Это выглядит вдвойне верно для конфигурационных файлов. Если смотреть в правильном свете, Perl-скрипт - это немного больше, чем конфигурационный файл для Perl. Это имеет довольно тяжелые последствия для таких задач, как контроль качества и разделение труда, например, кто должен отвечать за изменение файлов конфигурации.
Сползание от конфигурационного файла к полноценному языку, как правило, происходит медленно и, похоже, вызвано желанием иметь общую систему. Кажется, что большинство проектов начинаются с малого, с нескольких элементов конфигурации, таких как, где записывать логи, где искать данные, имена пользователей и пароли и т. Д. Но затем они начинают расти: функции начинают включаться и выключаться, время и порядок операций начинают контролироваться, и, неизбежно, кто-то хочет начать добавлять к нему логику (например, используйте 10, если машина - X, и 15, если машина - Y). В определенный момент файл конфигурации становится языком, специфичным для домена, и при этом плохо написанным.
Теперь, когда я подошел, чтобы установить сцену, вот мои вопросы:
- Какова истинная цель конфига
файл
- Если попытаться сохранить
Конфигурационные файлы простые?
- Кто должен нести ответственность за создание
изменения в них (разработчики, пользователи,
администраторы и т. д.)?
- Должны ли они контролироваться источником
(см. вопрос 3)?
Как я уже говорил ранее, мои ответы на эти вопросы постоянно меняются, но сейчас я думаю:
- , чтобы позволить непрограммистам измениться
большие куски поведения быстро
- да, все, что не грубо
зернистость должна быть в коде
- пользователи должны нести ответственность за
конфигурационные файлы и программисты должны
нести ответственность за конфигурацию
слой между файлами конфигурации и кодом
это дает более точный контроль
заявки
- нет, но мелкозернистый средний слой должен быть