Quelle est la meilleure façon (et emplacement) de stocker des paramètres non BLOB?
Sous Windows, il semble acceptable d'utiliser le registre. À mon avis, le registre était un système mal conçu, et plutôt un simple fichier texte dans le Users\Username\AppData
répertoire devrait être préféré. C'est plus facile à sauvegarder, moins dangereux à modifier pour les utilisateurs et plus facile à nettoyer.
Sous Linux et la plupart des Unix, l'emplacement préféré est /home/user/.config/appname
pour les paramètres spécifiques à l'utilisateur et /etc/
pour les paramètres globaux (à l'échelle du système). L'emplacement moins préféré (mais acceptable) pour les paramètres utilisateur est~/.appname
, mais cela tombe généralement en disgrâce. Ces fichiers doivent être modifiables par l'utilisateur, donc un format lisible par l'homme est toujours préférable.
Je ne suis pas d'accord avec la plupart des gens que XML est un format acceptable pour stocker des données non blob. C'est, à mon avis, un format surmené et excessivement complexe pour ce qui finit généralement par être de très petites données structurées. Je préfère voir les fichiers en YAML, JSON, ASN.1, paires nom = valeur ou formats similaires. Avoir trop de syntaxe, il est trop facile pour un utilisateur de gâcher et de laisser le fichier dans un format non valide.
Faut-il suivre chaque système par défaut ou avoir une solution unifiée?
Cela dépend entièrement de vous, mais gardez à l'esprit certaines choses:
- Les plates-formes comme * nix ont des limitations strictes sur les emplacements accessibles en écriture. Plus strict que Windows. Donc:
- Le seul endroit où vous devez écrire est dans le répertoire personnel de l'utilisateur.
- Sauf si votre application est un service système; dans ce cas, tous les fichiers de données modifiables doivent être écrits
/var/
. Les fichiers de données non modifiables doivent être conservés dans le répertoire de votre application dans /usr/share/
ou /usr/local/share/
ou/opt/
- Les fichiers de configuration ne
/etc/
doivent jamais être écrits par l'application lorsqu'elle est en cours d'exécution, même si elle y a accès en écriture. /etc/
devrait être le référentiel des comportements par défaut et rien d'autre.
- Plan pour votre application à installer dans l' un des trois endroits:
/usr/local/
, /opt/appname
ou /home/username/appname
.
- Les objets blob doivent être stockés avec d'autres fichiers de configuration s'ils doivent être modifiés. Il est généralement préférable d'utiliser un format modifiable par l'utilisateur, donc quelque chose comme SQLite ou Berkeley DB est préféré (car il existe des outils de ligne de commande pour chacun), mais pas obligatoire.
- Sous Windows, vos applications ne doivent écrire que dans le répertoire utilisateur. L'emplacement normalisé des fichiers de données est
Users\User\AppData
. Nulle part ailleurs ne semble acceptable.
- Sous Mac OS X, les paramètres de votre application doivent être stockés
~/Library/Preferences
avec tous les fichiers plist des autres applications. plist
semble être le format préféré, mais vous voudrez vérifier les directives Apple.
Et quel est le meilleur moyen portable?
Il n'y a pas de «meilleur», pour être honnête. Il n'y a que des limites et des attentes spécifiques à la plate-forme. Ma recommandation est de s'en tenir à des moyens spécifiques à la plate-forme, même si cela signifie écrire plus de code.