In Windows ist die Standardeinstellung die Registrierung. Auf diese Weise können Sie systemweite und benutzerspezifische Einstellungen unterscheiden.
Unter Unix sollten Sie Textdateien im Ordner / etc für systemweite Einstellungen verwenden (wie lauten die Konventionen für Benutzereinstellungen?).
Viele neue Programme (und insbesondere solche, die für den portablen Einsatz entwickelt wurden) verwenden XML-Dateien.
- Was ist der beste Weg (und Speicherort), um Nicht-BLOB-Einstellungen zu speichern?
- Sollten wir die Standardeinstellungen jedes Systems befolgen oder eine einheitliche Lösung haben?
- Und was ist der beste tragbare Weg?
portability
Wizard79
quelle
quelle
Antworten:
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.
Das liegt ganz bei Ihnen, aber denken Sie an einige Dinge:
/var/
. Nicht veränderbare Datendateien sollten in Ihrem App-Verzeichnis in/usr/share/
oder/usr/local/share/
oder aufbewahrt werden/opt/
/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./usr/local/
,/opt/appname
oder/home/username/appname
.Users\User\AppData
. Nirgendwo scheint das akzeptabel zu sein.~/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.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.
quelle
%APPDATA%
> In my opinion, the registry was a poorly-devised system, and instead a simple text file in the Users\Username\AppData directory should be preferred.
@greyfade - Der langjährige Windows-API-Entwickler Raymond Chen spricht dies an und erklärt, warum die Verwendung von Textdateien über die Registrierung kein besseres Entwurfsmuster darstellt: Warum werden INI-Dateien zugunsten der Registrierung abgelehntVerwenden Sie unter Windows
%APPDATA%\appname
. Verwenden Sie unter * NIX~/.appname
. Verwenden Sie unter keiner der Plattformen feste Verzeichnisnamen, da sich das Basisverzeichnis des Benutzers vom Standardverzeichnis unterscheiden kann (beispielsweise im Netzwerk).Verwenden Sie für das Format das, was Sie für am besten halten. Diese Entscheidung können nur Sie im Rahmen Ihrer Bewerbung treffen. Es ist unnötig und in der Tat nicht ratsam, eine "Standard" -Methode zu verwenden, wenn diese "Standard" -Methode nicht die beste für Ihr bestimmtes Programm ist.
XML / JSON ist beispielsweise eine gute Methode zum Speichern von Benutzerdaten / -konfigurationen, wenn Ihre Anwendung XML / JSON bereits für andere Zwecke verwendet. Aber wenn es sich um eine einfache Konfigurationsdatei handelt, warum sollten Sie Ihrer App Schwung verleihen, indem Sie eine Abhängigkeit einführen? In diesem Fall ist es wahrscheinlich am besten,
var: value\n
stattdessen eine einfache Textdatei mit Linien zu verwenden.EDIT: Es gibt keinen "besten" portablen Weg, da Betriebssysteme hierfür sehr unterschiedliche Konventionen verwenden. Brechen Sie nicht ohne triftigen Grund die OS-Standards.
EDIT2: Wenn Sie eine systemweite Einstellung in
/etc
oder vornehmenHKEY_LOCAL_MACHINE
, fragen Sie sich, ob die Einstellung wirklich global ist. Warten Sie dann 5 Minuten und fragen Sie sich erneut. Wenn die Antwort immer noch Ja lautet, nehmen Sie auf jeden Fall eine globale Einstellung vor. Denken Sie daran, ein normaler Benutzer nicht über Schreibzugriff auf/etc
oderHKEY_LOCAL_MACHINE
und dies zu tun, sind Sie , dass jemand ohne Admin - Rechte sicherstellen , dass Ihre App nicht installieren können.quelle
~/.config/applicaton
wird zunehmend zum bevorzugten Standort auf * nix.~
tut dies etwa ein Viertel der Anwendungen, in denen Konfigurationsdaten gespeichert sind~/.config/appname
.Ich versuche mich aus der Registrierung herauszuhalten, es ist viel zu weit verbreitet. Ich wünschte, jeder würde.
Ich mag es, XML-Konfigurationsdateien oder eine Bin-Datei oder gelegentlich eine lokale Datenbank (SQLite) zu speichern.
quelle
Meine Antwort ist eine Kombination aus Chinmay Kanchis Antwort und BioBuckyBalls Antwort .
XML / Json für einfache Konfigurationen, SQLite für komplexe, größere Konfigurationen, die im Standardordner für Betriebssystemanwendungen oder im Standardordner für Betriebssystembenutzer abgelegt sind, wenn Konfigurationen benutzerabhängig sind. Beides könnte genutzt werden.
quelle
Unter Windows würde ich die Anwendungseinstellung im
AppData
Ordner behaltenquelle
Benutzereinstellungen sind normalerweise in
So zum Beispiel für irssi-Einstellungen sind /home//.irssi/config
quelle
/home/<user>/etc/application
?~/.config/application
, um die Konsolidierung zu unterstützen. Ich bin geneigt, dieser Bewegung zuzustimmen.AppData
.Ich denke, es ist am besten, den bevorzugten plattformspezifischen Mechanismus zu verwenden. Unter OS X besteht der bevorzugte Mechanismus darin, eine Eigenschaftsliste in ~ / Library / Preferences abzulegen, und die Cocoa-API verfügt über eine sehr einfache Oberfläche zum Speichern und Abrufen von Einstellungen.
Wenn Ihre App plattformübergreifend ist, können Sie dies mit einer Klasse oder so weiter abstrahieren.
quelle
Das einzige, was ich in die Registrierung schreibe, ist der Speicherort der App, sodass Installer und Updater sie leicht finden können. Alles andere wird in Dateien in / AppData / Company / App gespeichert
quelle
Für Java-Apps halte ich gson für eine gute Wahl. Erstellen Sie Ihre Einstellungsobjekte und konvertieren Sie sie mit gson in JSON und umgekehrt. Es hat den Vorteil, dass es von Menschen lesbar ist, anstatt von seriellen Blobs.
Edit: ok, also ist es vielleicht nicht so allgemein ...
quelle
Wenn Sie in .NET schreiben, können Sie mithilfe von System.Environment.SpecialFolders herausfinden, welche Ordner zum Speichern der Konfiguration oder einiger Daten verwendet werden können.
quelle