Fichiers de configuration d'Application
OK, donc je ne veux pas commencer un saint-guerre ici, mais nous sommes dans le processus d'essayer de consolider la façon dont nous traitons nos fichiers de configuration d'application et nous avons du mal à prendre une décision sur la meilleure approche à adopter. Pour le moment, toutes les applications que nous distribuons est en utilisant son propre ad-hoc des fichiers de configuration, si c'est une propriété des fichiers (de type ini), XML ou JSON (à usage interne pour le moment!).
La plupart de nos code Java pour le moment, nous avons donc été à la recherche à Apache Commons Config, mais nous avons trouvé pour être tout à fait clair. Nous avons également regardé XMLBeans, mais il semble que beaucoup de tourner en rond. J'ai aussi l'impression que si je suis poussé vers XML comme format, mais avec mes clients et mes collègues sont inquiets au sujet d'essayer quelque chose d'autre. Je peux comprendre le point de vue du client, tout le monde a entendu parler de XML, mais à la fin de la journée, ne devraient pas utiliser le bon outil pour le travail?
Quels sont les formats et les bibliothèques sont des gens en utilisant des systèmes de production de ces jours, est ce que quelqu'un d'autre en essayant d'éviter le angle de fixation de l'impôt?
Edit: a vraiment besoin d'être une plate-forme solution: Linux, Windows, Solaris, etc. et le choix de la bibliothèque de servir d'interface avec les fichiers de configuration est tout aussi important que le choix du format.
- upvoted juste pour dire que XMLBeans "semble comme beaucoup de tourner en rond"
Vous devez vous connecter pour publier un commentaire.
XML XML XML XML. Nous parlons fichiers de config ici. Il n'y a pas de "support à angle de l'impôt" si vous n'êtes pas la sérialisation des objets en fonction de leurs performances intenses situation.
Fichiers de configuration doivent être lisibles par l'homme et de l'homme compréhensible, plus lisibles à la machine. XML est un bon compromis entre les deux.
Si votre magasin a des gens qui ont peur que d'un nouveau genre la technologie XML, je me sens mal pour vous.
YAML, pour la simple raison qu'il est très lisible des fichiers de configuration par rapport à XML.
XML:
YAML:
Les exemples ont été prises à partir de cette page: http://www.kuro5hin.org/story/2004/10/29/14225/062
Premier: C'est vraiment un gros débat problème, pas une solution Q+A.
Mon préféré pour le moment est tout simplement inclure Lua, parce que
Une autre option, si il y a beaucoup de données consiste à utiliser sqlite3, parce qu'elles sont en droit de réclamer
Choisir trois.
À qui je voudrais ajouter:
Mais encore une fois, c'est un gros problème. Un "gros" la réponse à cette implique sans doute une sorte de fonction de la matrice ou de la liste de situations comme:
Quantité de données, ou à court d'exécution
Quelle est la configuration concernent?
Complexité
Sans se lancer dans une nouvelle guerre sainte, les sentiments de l'angle du support de l'impôt' post est un domaine où je fortement en désaccord avec Jeff. Il n'y a rien de mal avec XML, il est raisonnablement lisible par l'homme (autant que YAML ou JSON ou les fichiers INI sont) mais n'oubliez pas son but est d'être lu par des machines. La plupart langage/framework combos venir avec un analyseur XML, de la sorte, gratuit qui fait de XML un très bon choix.
Aussi, si vous êtes en utilisant une bonne IDE, tels que Visual Studio, et si le XML est livré avec un schéma, vous pouvez donner le schéma de VS et comme par magie, intellisense (vous pouvez en obtenir un pour NHibernate par exemple).
Ulimately vous devez penser à combien de fois vous allez être en contact avec ces fichiers une fois en production, probablement pas très souvent.
Ce encore dit tout cela, pour moi à propos de XML et pourquoi cela reste un choix valable pour les fichiers de configuration (à partir de Tim Bray):
"Si vous souhaitez fournir des données d'usage universel que le récepteur est susceptible de vouloir faire imprévus bizarre et fou les choses, ou si vous voulez être vraiment paranoïaque et pointilleux sur i18n, ou si ce que vous envoyez est plus comme un document qu'un struct, ou si l'ordre des données, des questions, ou si les données sont potentiellement de longue durée (comme dans, plus de secondes) XML est le chemin à parcourir.
Il me semble aussi que la combinaison de XML et XPath frappe un sweet spot pour les formats de données qui doivent être extensible, c'est-à-dire, il est assez facile d'écrire du XML code de traitement qui ne manquera pas en présence de changements de format de message qui ne touche pas la pièce que vous aimez."
@Guy
Mais l'application de config n'est pas toujours juste de paires clé/valeur. Regardez quelque chose comme la configuration de tomcat pour que les ports d'écoute. Voici un exemple:
Vous pouvez avoir n'importe quel nombre de connecteurs. Définir plus dans le fichier et plus existe des connecteurs. Ne définissez pas plus et n'existe même plus. Il n'y a pas de bonne façon (à mon humble avis) pour faire ça avec un bon vieux paires clé/valeur.
Si votre application est de la config est simple, alors quelque chose de simple comme un fichier INI qui est lu dans un dictionnaire est probablement pas un problème. Mais pour quelque chose de plus complexe comme la configuration du serveur, un fichier INI serait une énorme douleur à maintenir, et quelque chose de plus structurels comme XML ou YAML serait mieux. Tout dépend du problème.
Nous utilisons de type ini fichiers de configuration. Nous utilisons le Nini bibliothèque pour les gérer. Nini, c'est très facile à utiliser. Nini a été originairement pour .NET, mais il a été porté sur d'autres plates-formes à l'aide de Mono.
XML, JSON, INI.
Ils ont tous leurs forces et leurs faiblesses.
Dans un contexte d'application, j'ai l'impression que la couche d'abstraction est la chose la plus importante.
Si vous pouvez choisir une structure de données qui est un bon compromis entre lisibilité et la façon dont vous souhaitez accéder à/abstract les données dans le code, vous êtes d'or.
Nous utilisons principalement XML où je travaille, et je ne peux pas vraiment croire qu'un fichier de configuration chargé dans un cache comme des objets lors de la première lecture ou après qu'il a été écrit, puis disparaît à partir du reste du programme, c'est vraiment trop d'un coup sur ni PROCESSEUR ni de l'espace disque.
Et c'est assez lisible trop, aussi longtemps que vous la structure du fichier de droit.
Et toutes les langues sur toutes les plates-formes en charge le XML par pas mal de bibliothèques communes.
@Herms
Vraiment ce que je voulais dire, c'était en tenir à la méthode recommandée logiciel doit stocker les valeurs de configuration pour toute plate-forme donnée.
Ce que vous obtenez souvent alors il est aussi recommandé ces moyens doivent/peuvent être modifiés. Comme un menu de configuration dans un programme ou un panneau de configuration dans "préférences système" de l'application (pour le système de services de logiciels de ie). Ne pas laisser les utilisateurs finaux de modifier directement via RegEdit ou le bloc-notes...
Pourquoi?
@ninesided
Sur " choix de la bibliothèque ", essayez de lien (lien statique) sélectionné à la bibliothèque afin de réduire le risque de tomber dans une version de conflit de la guerre sur les ordinateurs des utilisateurs.
Si votre fichier de configuration est en écriture une fois, en lecture seule au démarrage, et de vos données est un tas de paires nom /valeur, votre meilleur choix est celui de votre développeur peut obtenir en travaillant d'abord.
Si vos données est un peu plus compliqué, avec l'imbrication etc, vous êtes probablement mieux avec YAML, XML, ou SQLite.
Si vous avez besoin de données imbriquées et/ou la possibilité d'interroger les données de configuration après le démarrage, utilisation de XML ou SQLite. Les deux ont de très bons langages de requête XPATH (et SQL) pour structurés de données imbriquées.
Si vos données de configuration est très normalisé (par exemple, de la 5e à la forme normale de), vous êtes mieux avec SQLite, SQL est mieux pour traiter normalisé de données.
Si vous envisagez d'écrire un article pour la configuration de l'ensemble de données au cours de l'opération du programme, alors vous êtes mieux de passer avec SQLite. Par exemple, si vous téléchargez les données de configuration à partir d'un autre ordinateur, ou si vous basant futur programme d'exécution des décisions sur des données recueillies dans les précédentes, l'exécution du programme. SQLite implémente très robuste de données de moteur de stockage qui est extrêmement difficile à corrompre quand vous avez des pannes de courant ou des programmes qui sont accrochées dans un état incohérent dues à des erreurs. Corruptible données conduit à champ élevé des coûts de support, et SQLite va faire beaucoup mieux que toute la maison-grandi solution ou même les bibliothèques populaires autour de XML ou YAML.
Découvrez ma page pour plus d'informations sur SQLite.
Autant que je sache, le registre de Windows n'est plus le moyen privilégié pour le stockage de la configuration si vous êtes en utilisant .NET - la plupart des applications utilisent désormais le Système.Configuration [1, 2]. Puisque c'est aussi basé sur XML, il semble que tout est en mouvement dans le sens de l'utilisation de XML pour la configuration.
Si vous voulez rester la croix-plate-forme, je dirais qu'à l'aide d'un fichier texte serait le meilleur itinéraire pour aller. Comme pour la mise en forme de ce dossier, vous voudrez peut-être prendre en compte si un homme va être de les manipuler ou pas. XML semble être un peu plus respectueux de manuel de manipulation de fichiers INI en raison de la structure apparente du fichier.
Comme pour l'angle de fixation de l'impôt - je ne m'inquiète pas trop souvent que le XML bibliothèques prendre soin de le dégager. Le seul moment où il peut être pris en compte est que si vous avez très peu d'espace de stockage et de travailler avec tous les compteurs d'octets.
[1].La Configuration De L'Espace De Noms http://msdn.microsoft.com/en-us/library/system.configuration.aspx
[2] à l'Aide de Fichiers de Configuration d'Application dans .NET - http://www.developer.com/net/net/article.php/3396111
Nous utilisons des fichiers de propriétés, tout simplement parce que Java prend en charge nativement. Il y A quelques mois, j'ai vu que SpringSource Application Platform utilise JSON pour configurer leur serveur, et il a l'air très intéressant. Je comparé les différentes configuration notations et est venu à la conclusion que XML semble être la meilleure forme en ce moment. Il a de bons outils de soutien et est plutôt indépendant de la plateforme.
Re: epatel commentaire
Je pense que la question initiale a été de demander à propos de la configuration de l'application que l'admin serait à faire, pas seulement de stocker les préférences de l'utilisateur. Les suggestions qui vous a donné sembler plus pour user prefs que l'application de config, et ne sont généralement pas quelque chose que l'utilisateur ne serait jamais traiter directement (l'application doit fournir les options de configuration dans l'INTERFACE utilisateur, puis mettre à jour les fichiers). J'espère vraiment que vous ne le ferais jamais l'utilisateur de visualiser/modifier le Registre. 🙂
Comme pour la question, je dirais que XML est probablement OK, comme beaucoup de gens seront utilisés pour l'aide que pour la configuration. Aussi longtemps que vous organisez les valeurs de configuration dans un format facile à utiliser de manière "angle du support de l'impôt" ne devrait pas être trop mauvais.
Peut-être un peu d'une tangente ici, mais mon opinion est que le fichier de configuration doit être lu en une valeur de clé de dictionnaire/table de hachage lorsque l'application démarre pour la première fois et toujours accessibles via cet objet à partir de là, pour la vitesse. Généralement la clé/valeur de la table commence comme une chaîne de caractères de la chaîne mais des fonctions d'assistance à l'objet, par exemple de type DateTime GetConfigDate(string key) etc...
Je pense que la seule chose importante est de choisir le format que vous préférez et peut naviguer rapidement. XML et JSON sont à la fois fines formats pour les configs et sont largement pris en charge--techniques de mise en œuvre n'est pas au cœur de la question, il me semble. C'est 100% sur ce qui rend la tâche des fichiers de configuration plus facile pour vous.
J'ai commencé à utiliser JSON, parce que je travaille un peu avec elle en tant que données de format de transport, et les sérialiseurs le rendre facile à charger dans tout cadre de développement. Je trouve JSON est plus facile à lire que XML, ce qui facilite le traitement des services multiples, chacune utilisant un fichier de configuration est modifié assez fréquemment, que beaucoup easer pour moi!
Quelle plate-forme travaillez-vous? Je vous recommande d'essayer d'utiliser le préféré/méthode commune pour elle.