it-swarm-fr.com

Meilleur moyen d'enregistrer les paramètres d'application

Sous Windows, la manière par défaut est du registre. Cela vous permet de différencier les paramètres du système et des paramètres par utilisateur.

Dans UNIX, vous devez utiliser des fichiers texte dans le dossier/etc pour les paramètres à l'échelle du système (quelle est la convention pour les paramètres par utilisateur?).

De nombreux nouveaux programmes (et en particulier ceux conçus pour être portable) utilisent des fichiers XML.

  • Quel est le meilleur moyen (et lieu) pour stocker les paramètres non blob?
  • Devrions-nous suivre chaque système par défaut ou avoir une solution unifiée?
  • Et quel est le meilleur portable chemin?
17
Wizard79

Quel est le meilleur moyen (et lieu) pour stocker les paramètres non blob?

Sous Windows, il semble acceptable d'utiliser le registre. À mon avis, le greffe était un système mal conçu et un fichier texte simple dans le fichier Users\Username\AppData Le répertoire devrait être préféré. Cela est plus facile à sauvegarder, moins dangereux pour les utilisateurs de modifier et plus facile à nettoyer.

Sur Linux et la plupart des UNIXES, 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 hors de faveur. Ces fichiers doivent être modifiés par l'utilisateur, de sorte qu'un format lisible par l'homme est toujours préféré.

Je suis en désaccord avec la plupart des gens que XML est un format acceptable pour stocker des données non blob. À mon avis, c'est un format excessivé et excessivement complexe pour ce qui finit généralement d'être très petits de données structurées. Je préfère voir des fichiers dans yaml, json, asn.1, nom = paires de valeur ou formats similaires. Avoir trop de syntaxe, il est trop facile pour un utilisateur de gâcher et de quitter le fichier dans un format invalide.

Devrions-nous suivre chaque système par défaut ou avoir une solution unifiée?

C'est entièrement à vous, mais gardez des choses à l'esprit:

  • Les plates-formes telles que * Nix ont des limitations strictes sur lesquelles des emplacements sont écrits. Plus strict que les fenêtres. Donc:
    • Le seul endroit que vous devriez écrire à tout ce qui est dans le répertoire de base de l'utilisateur.
    • sauf Votre application est un service système; Dans ce cas, tous les fichiers de données mutables doivent être écrits en /var/. Les fichiers de données non maîtres doivent être conservés dans votre annuaire d'applications dans /usr/share/ ou /usr/local/share/ ou /opt/
    • Fichiers de configuration dans /etc/ devrait jamais être écrit à l'application lors de son exécution, même s'il y a un accès en écriture. /etc/ devrait être le référentiel pour par défaut comportements et rien d'autre.
    • Planifiez votre demande à installer dans l'un des trois places: /usr/local/, /opt/appname, ou /home/username/appname.
    • Les blobs doivent être stockés aux côtés d'autres fichiers de configuration si elles doivent être modifiées. C'est généralement préférable d'utiliser un format d'utilisateur modifiable, alors quelque chose comme SQLite ou Berkeley DB est préféré (car il existe des outils de ligne de commande pour chacun) , mais pas requis.
  • Sous Windows, vos applications ne doivent jamais écrire dans le répertoire utilisateur. L'emplacement normalisé pour les fichiers de données est Users\User\AppData. Nulle part ailleurs semble acceptable.
  • Sur Mac OS X, vos paramètres d'application doivent être stockés dans ~/Library/Preferences Avec toutes les autres fichiers de plis d'applications. plist semble être le format préféré, mais vous voudrez vérifier avec les lignes directrices Apple.

Et quelle est la meilleure façon portable?

Il n'y a pas de "meilleur," pour être honnête. Il n'y a que des limitations et des attentes spécifiques à la plate-forme. Ma recommandation consiste à coller avec des moyens spécifiques à la plate-forme, même si cela signifie écrire plus de code.

23
greyfade

Sous Windows, utilisez %APPDATA%\appname. Sous * Nix, utilisez ~/.appname. N'utilisez pas les noms de répertoires fixes sous l'une ou l'autre plate-forme, car le répertoire de base de l'utilisateur peut être différent de la valeur par défaut (cela pourrait être sur le réseau, par exemple).

Quant au format, utilisez ce que vous pensez est le meilleur. C'est une décision que seules vous peut faire dans le contexte de votre application. Il est inutile, et effectivement, d'avoir une manière "standard" de le faire, si cette méthode de "standard" n'est pas ce qui est le mieux pour votre programme particulier.

Par exemple, XML/JSON pourrait être un bon moyen de stocker des données/configuration utilisateur si votre application utilise déjà XML/JSON pour autre chose. Mais si c'est un fichier de configuration simple, pourquoi ajouter BLOAT à votre application en introduisant une dépendance? Dans ce cas, il est probablement préférable d'utiliser simplement un fichier texte simple avec var: value\n lignes à la place.

Edit : Il n'y a pas de manière "meilleure" portable, car les OSES utilisent des conventions très différentes pour cela. Ne casserez pas les normes du système d'exploitation sans une bonne raison sanglante.

Edit2 : Si vous vous trouvez en train de définir un réglage de système dans /etc ou HKEY_LOCAL_MACHINE, demandez-vous si le réglage est vraiment Global. Attendez ensuite 5 minutes et demandez-vous à nouveau. Si la réponse est toujours oui, alors par tous les moyens, effectuez un cadre global. N'oubliez pas qu'un utilisateur normal n'a pas d'accès en écriture à /etc ou HKEY_LOCAL_MACHINE Et en faisant cela, vous vous assurez que quelqu'un sans droits d'administration ne peut pas installer votre application.

8
Chinmay Kanchi

J'essaie de garder hors du registre, c'est façon sur utilisé. Je souhaite que tout le monde puisse.

J'aime garder les fichiers de configuration XML ou un fichier bin ou occasionnellement une base de données locale (SQLite).

3
µBio

Ma réponse est une combinaison de Chinmay Kanchi's Réponse et Biobuckyball's Réponse .

XML/JSON Pour des configurations simples, SQLite pour des configurations complexes complexes, plus grandes configurations garées sur le dossier d'application OS par défaut ou le dossier d'utilisateur du système d'exploitation par défaut lorsque les configurations sont dépendantes de l'utilisateur. Les deux pourraient être utilisés.

3
Maniero

Sous Windows, je garderais le paramétrage de l'application dans AppData dossier

2
Graviton

Les paramètres utilisateur sont généralement dans

/home/<user>/.<application> 

Donc, par exemple pour les paramètres IRSSI, sont /Home//.irssi/config

1
Chris

Je pense qu'il est préférable d'utiliser le mécanisme spécifique à la plate-forme préféré. Par exemple, sur OS X, le mécanisme préféré consiste à placer une liste de propriétés dans ~/Bibliothèque/préférences, et l'API COCOA a une interface vraiment simple pour stocker et récupérer les paramètres de là.

Si votre application est multiplate-forme, vous pouvez abstraire cela avec une classe ou.

1
mipadi

La seule chose que j'écris au registre est l'emplacement de l'application, de sorte que les installateurs et les postumateurs puissent le trouver facilement. Tout le reste est stocké dans des fichiers dans/Appdata/Company/App

0
GrandmasterB