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