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