Zastanawiam się od jakiegoś czasu nad plikami konfiguracyjnymi i ich związkiem z kodem i w zależności od dnia i kierunku wiatru moje opinie wydają się zmieniać. Coraz bardziej jednak wracam do świadomości, którą po raz pierwszy miałem podczas nauki Lispa: istnieje niewielka różnica między danymi a kodem. Wydaje się to podwójnie prawdziwe w przypadku plików konfiguracyjnych. W odpowiednim świetle skrypt Perla to niewiele więcej niż plik konfiguracyjny dla Perla. Ma to zwykle dość poważne konsekwencje dla zadań, takich jak kontrola jakości i podziały pracy, takie jak to, kto powinien być odpowiedzialny za zmianę plików konfiguracyjnych.
Przejście z pliku konfiguracyjnego do pełnoprawnego języka jest generalnie powolne i wydaje się być spowodowane chęcią posiadania ogólnego systemu. Większość projektów wydaje się zaczynać od małych elementów konfiguracyjnych, takich jak miejsce zapisywania dzienników, miejsce wyszukiwania danych, nazw użytkowników i haseł itp. Ale potem zaczynają się rozwijać: funkcje zaczynają być włączane i wyłączane, czas i kolejność operacji zaczynają być kontrolowane i nieuchronnie ktoś chce zacząć dodawać do niej logikę (np. użyj 10, jeśli maszyna jest X i 15, jeśli maszyna jest Y). W pewnym momencie plik konfiguracyjny staje się językiem specyficznym dla domeny i do tego jest słabo napisany.
Teraz, gdy mam już dużo roboty, aby ustawić scenę, oto moje pytania:
- Jaki jest prawdziwy cel pliku konfiguracyjnego?
- Czy należy postarać się, aby pliki konfiguracyjne były proste?
- Kto powinien być odpowiedzialny za wprowadzanie w nich zmian (programiści, użytkownicy, administratorzy itp.)?
- Czy powinny podlegać kontroli źródła (patrz pytanie 3)?
Jak powiedziałem wcześniej, moje odpowiedzi na te pytania ciągle się zmieniają, ale teraz myślę:
- aby umożliwić nie-programistom szybką zmianę dużych fragmentów zachowania
- tak, wszystko, co nie jest gruboziarniste, powinno być zakodowane
- użytkownicy powinni być odpowiedzialni za pliki konfiguracyjne, a programiści powinni być odpowiedzialni za warstwę konfiguracji między plikami konfiguracyjnymi a kodem, która zapewnia bardziej szczegółową kontrolę nad aplikacją
- nie, ale powinna być drobniejsza warstwa środkowa