Konzept Konfiguration
Anwendungsprogramme, besonders wenn sie eine gewisse Größe erreichen, benötigen oftmals eine Konfiguration. Manche Konfiguration ist von globaler Bedeutung und manche Konfiguration nur von lokale Bedeutung (z.B. innerhalb eines Plug-Ins).
Dabei stellen sich oft die Frage, wie geht man mit den Konfigurationsdaten um?
- Schreibt/Liest man diese „am Stück“ zum Programm-Start oder -Ende?
Das bedeutet, das Haupt-Programm Schreibt/Liest Konfigurationsdaten von sich selbst und seinen Plug-Ins. ⇒ Welche Daten geben die Plug-Ins in Auftrag? - Schreibt jede kleine Einheit ihre eigenen Daten?
- Wo und in welcher Weise werden Konfigurationsdaten geschrieben/gelesen und Programmintern zur Verfügung gestellt?
- Wie steht es um Konfigurationsdaten, für die Voreinstellungen hinterlegt werden müssen, wenn eine solche Konfiguration noch gar nicht existiert?
Das Wie und Wo
Denkbar wäre, dass …
- Daten in einem Python-Modul stehen, welches zu Programmbeginn gelesen wird. Schreiben von Änderungen ist schwerlich möglich.
- Schreiben und Lesen einer INI-Datei ist prinzipiell möglich. Jedoch muss man genau wissen welche Werte zu schreiben/lesen sind. Eine schwierige Situation, wenn ein Haupt-Programm die Daten seiner Plug-Ins schreiben/lesen muss.
- Aufbau einer Datenstruktur, in die sich auch Plug-Ins „einklinken“ können. Die Gesamtstruktur wird in einer JSON-Datei (JSON) gespeichert bzw. von ihr gelesen. Die geschriebene Datei wäre vom Benutzer lesbar und könnte auch verändert werden.
- Aufbau einer Datenstruktur, in die sich auch Plug-Ins „einklinken“ können. Die Gesamtstruktur wird in einer YAML-Datei (YAML) gespeichert bzw. von ihr gelesen. Die geschriebene Datei wäre vom Benutzer lesbar und könnte auch verändert werden.
- Aufbau einer Datenstruktur, in die sich auch Plug-Ins „einklinken“ können. Die Gesamtstruktur wird in einer pickle-Datei gespeichert bzw. von ihr gelesen. Die geschriebene Datei wäre vom Benutzer nicht mehr lesbar, da sie binär ist.
- Schreiben und Lesen der Konfigurationsdaten aus einer Datenbank.