Ich habe schon eine Weile über Konfigurationsdateien und ihre Beziehung zum Code nachgedacht und je nach Tag und Windrichtung scheinen sich meine Meinungen zu ändern. Immer mehr komme ich auf die Erkenntnis zurück, die ich beim Erlernen von Lisp zum ersten Mal hatte: Es gibt kaum einen Unterschied zwischen Daten und Code. Dies scheint für Konfigurationsdateien doppelt zu gelten. Im richtigen Licht betrachtet ist ein Perl-Skript kaum mehr als eine Konfigurationsdatei für Perl. Dies hat in der Regel ziemlich schwerwiegende Konsequenzen für Aufgaben wie Qualitätssicherung und Arbeitsteilung, z. B. wer für das Ändern von Konfigurationsdateien verantwortlich sein sollte.
Das Kriechen von der Konfigurationsdatei zur vollwertigen Sprache ist im Allgemeinen langsam und scheint vom Wunsch nach einem generischen System getrieben zu sein. Die meisten Projekte scheinen klein anzufangen, mit ein paar Konfigurationselementen wie dem Schreiben von Protokollen, dem Suchen nach Daten, Benutzernamen und Kennwörtern usw. Aber dann beginnen sie zu wachsen: Funktionen können ein- oder ausgeschaltet werden, Die Zeitabläufe und die Reihenfolge der Operationen werden allmählich gesteuert, und zwangsläufig möchte jemand damit beginnen, Logik hinzuzufügen (z. B. 10, wenn die Maschine X ist, und 15, wenn die Maschine Y ist). Ab einem bestimmten Punkt wird die Konfigurationsdatei zu einer domänenspezifischen Sprache, und zwar zu einer schlecht geschriebenen.
Nachdem ich mich auf den Weg gemacht habe, sind hier meine Fragen:
- Was ist der wahre Zweck einer Konfigurationsdatei?
- Sollte versucht werden, Konfigurationsdateien einfach zu halten?
- Wer sollte für Änderungen an ihnen verantwortlich sein (Entwickler, Benutzer, Administratoren usw.)?
- Sollten sie quellengesteuert sein (siehe Frage 3)?
Wie ich bereits sagte, ändern sich meine Antworten auf diese Fragen ständig, aber im Moment denke ich:
- Damit Nicht-Programmierer große Verhaltensblöcke schnell ändern können
- Ja, alles, was nicht grobkörnig ist, sollte im Code enthalten sein
- Benutzer sollten für Konfigurationsdateien verantwortlich sein, und Programmierer sollten für eine Konfigurationsschicht zwischen Konfigurationsdateien und Code verantwortlich sein, die eine genauere Kontrolle über die Anwendung ermöglicht
- nein, aber die feinkörnigere Mittelschicht sollte sein