Was ist der beste Weg (und Speicherort), um Nicht-BLOB-Einstellungen zu speichern?
Unter Windows scheint es akzeptabel, die Registrierung zu verwenden. Meiner Meinung nach war die Registrierung ein schlecht durchdachtes System, und stattdessen sollte eine einfache Textdatei im Users\Username\AppData
Verzeichnis bevorzugt werden. Dies ist einfacher zu sichern, für Benutzer weniger gefährlich zu ändern und einfacher zu bereinigen.
Unter Linux und den meisten Unixen werden /home/user/.config/appname
benutzerspezifische und /etc/
globale (systemweite) Einstellungen bevorzugt . Der weniger bevorzugte (aber akzeptable) Ort für Benutzereinstellungen ist ~/.appname
, aber dies fällt im Allgemeinen in Ungnade. Diese Dateien sollten vom Benutzer bearbeitet werden können, daher wird immer ein lesbares Format bevorzugt.
Ich bin mit den meisten Leuten nicht einverstanden, dass XML ein akzeptables Format zum Speichern von Nicht-Blob-Daten ist. Meiner Meinung nach handelt es sich um ein überarbeitetes und übermäßig komplexes Format für normalerweise sehr kleine strukturierte Daten. Ich bevorzuge es, Dateien in YAML, JSON, ASN.1, Name = Wert-Paaren oder ähnlichen Formaten zu sehen. Zu viel Syntax macht es einem Benutzer zu einfach, die Datei in einem ungültigen Format zu belassen.
Sollten wir die Standardeinstellungen jedes Systems befolgen oder eine einheitliche Lösung haben?
Das liegt ganz bei Ihnen, aber denken Sie an einige Dinge:
- Plattformen wie * nix unterliegen strengen Einschränkungen hinsichtlich der beschreibbaren Speicherorte. Strenger als Windows. So:
- Der einzige Ort, an den Sie schreiben sollten, ist das Home-Verzeichnis des Benutzers.
- Es sei denn, Ihre Anwendung ist ein Systemdienst. In diesem Fall sollten alle veränderlichen Datendateien geschrieben werden
/var/
. Nicht veränderbare Datendateien sollten in Ihrem App-Verzeichnis in /usr/share/
oder /usr/local/share/
oder aufbewahrt werden/opt/
- Konfigurationsdateien in
/etc/
sollten niemals von der Anwendung geschrieben werden, wenn sie ausgeführt wird, auch wenn sie Schreibzugriff darauf hat. /etc/
sollte das Repository für Standardverhalten sein und sonst nichts.
- Plan für Ihre Anwendung in einem von drei Orten installiert werden:
/usr/local/
, /opt/appname
oder /home/username/appname
.
- Blobs sollten zusammen mit anderen Konfigurationsdateien gespeichert werden, wenn sie geändert werden sollen. Es ist im Allgemeinen vorzuziehen , ein vom Benutzer bearbeitbares Format zu verwenden. Daher wird etwas wie SQLite oder Berkeley DB bevorzugt (da für jedes Tool Befehlszeilenprogramme vorhanden sind), dies ist jedoch nicht erforderlich.
- Unter Windows sollten Ihre Anwendungen immer nur in das Benutzerverzeichnis schreiben. Der standardisierte Speicherort für Datendateien ist
Users\User\AppData
. Nirgendwo scheint das akzeptabel zu sein.
- Unter Mac OS X sollten Ihre Anwendungseinstellungen
~/Library/Preferences
zusammen mit allen Plist-Dateien der anderen Anwendungen gespeichert werden. plist
scheint das bevorzugte Format zu sein, aber Sie sollten die Apple-Richtlinien genau prüfen.
Und was ist der beste tragbare Weg?
Es gibt kein "Beste", um ehrlich zu sein. Es gibt nur plattformspezifische Einschränkungen und Erwartungen. Ich empfehle, mich an plattformspezifische Mittel zu halten, auch wenn dies bedeutet, mehr Code zu schreiben.