Best practices für die Einstellungen zu speichern
Ich habe eine ziemlich große C++ - Anwendung (unter Windows, andere Plattformen geplant), die derzeit speichert alle Einstellungen (auch eine Art von Adressen in der Windows-registry.
Manchmal ist dies ungünstig, da die Benutzer Schwierigkeiten haben, ein ändern der Einträge in der registry. Ich würde gerne Einstellungen versioniert, also Einstellungen immer mit dem aktuellen code. Im moment haben wir version reg-Dateien, aber Sie sind nie sicher, wenn alle reg-Dateien Hinzugefügt wurden, die auf den zielmaschinen. Mit C# können Sie festlegen, default-Werte in app.config, aber nicht überschreiben die vorhandenen Einstellungen. Ich weiß nicht, ob so ein Mechanismus oder Bibliothek existiert für C++.
Möchte ich die folgenden "features":
- Einstellungen können versioniert werden
- Einfaches update auf den Ziel-Rechnern (kann durch den Benutzer)
- Sicherzustellen, dass auf aktualisieren werden nur neue Einstellungen Hinzugefügt werden und keine vorhandenen Einstellungen mit Standardwerten überschrieben
- Einfache änderung der Einstellungen für Benutzer
- Gleichen workflow unter Win XP und Win 7
Soweit ich es sehe, gibt es 3 Möglichkeiten zum speichern von Einstellungen unter Windows:
- Registry
- Ini-Datei
- XML-Datei
Nur eine Anwendung unserer suite nutzt Qt in dem moment, aber Boost zur Verfügung stehen würde.
Adressen, wir werden Sie in irgendeiner Art von XML-Adressbuch, sondern auch für die anderen Einstellungen sind wir nicht sicher, was ist die beste Praxis.
- Ich würde vorschlagen, andere alternativen: YAML/JSon für Menschen lesbaren format, SQLite für einfache embedded. Bezüglich
ini
Dateien, die Sie interessieren könnten How to parse-ini-Datei mit Boost. - +1 für Boost / ini-Dateien, wenn Sie können KI, SS.
- Wenn Sie mehrere Schichten von Einschlüssen, würde ich für die XML/JSON-Dateien. Ansonsten INI könnte die einfachste Lösung sein.
- +1 für JSON oder .ini. Mit der Registrierung ist ein Wartungs-Albtraum.
- danke für Eure inputs, aber was ist meine Anforderung #3?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Kommentar erwähnen -, Baum-basierte key/value-Strukturen sind eine gemeinsame Lösung und Bibliotheken sind leicht zu finden.
Boost ist property_tree ist eine ausgezeichnete Wahl, da es auch getestet und können leicht exportiert werden als XML-oder JSON -
Hinsichtlich Ihrer Anforderungen:
Ja! Stellen Sie "version" ein top-level-Taste. Machen Sie es leicht vergleichbar mit anderen Versionen.
Können Sie auch kategorisieren Sie Ihre Einstellungen in verschiedenen Knoten im Baum, und geben Sie jedem Knoten eine version.
Ihre Anwendung tun, wenn es läuft. Siehe unten.
Als Einstellungen von einer version zur anderen, in der Regel diese änderungen fallen in drei Kategorien. Neue Eigenschaften erforderlich sind, die alten Einstellungen werden verlassen, und einige Einstellungen ändern, Ihre erwarteten format. E. g. "Fahrenheit 32" wird zu "0 Celsius"
Wenn die Anwendung initialisiert:
Ihre "fehlende Einstellung" - Funktionen können: