En Windows, la forma predeterminada es el registro. Esto le permite diferenciar configuraciones de todo el sistema y por usuario.
En Unix, debe usar archivos de texto en la carpeta / etc para la configuración de todo el sistema (¿cuál es la convención para la configuración por usuario?).
Muchos programas nuevos (y especialmente aquellos diseñados para ser portátiles) usan archivos XML.
- ¿Cuál es la mejor manera (y ubicación) para almacenar configuraciones que no sean BLOB?
- ¿Deberíamos seguir los valores predeterminados de cada sistema o tener una solución unificada?
- ¿Y cuál es la mejor forma portátil ?
portability
Wizard79
fuente
fuente
Respuestas:
En Windows, parece aceptable usar el registro. En mi opinión, el registro era un sistema mal diseñado y, en cambio
Users\Username\AppData
, debería preferirse un simple archivo de texto en el directorio. Esto es más fácil de respaldar, menos peligroso para los usuarios modificar y más fácil de limpiar.En Linux y la mayoría de los Unix, la ubicación preferida es
/home/user/.config/appname
para configuraciones específicas del usuario y/etc/
para configuraciones globales (de todo el sistema). La ubicación menos preferida (pero aceptable) para la configuración del usuario es~/.appname
, pero esto generalmente está cayendo en desgracia. Estos archivos deben ser editables por el usuario, por lo que siempre se prefiere un formato legible por humanos.No estoy de acuerdo con la mayoría de las personas en que XML es un formato aceptable para almacenar datos que no son de blob. Es, en mi opinión, un formato excesivamente complejo y excesivamente complejo para lo que generalmente termina siendo piezas muy pequeñas de datos estructurados. Prefiero ver archivos en YAML, JSON, ASN.1, pares de nombre = valor o formatos similares. Tener demasiada sintaxis hace que sea demasiado fácil para un usuario equivocarse y dejar el archivo en un formato no válido.
Eso depende totalmente de usted, pero tenga en cuenta algunas cosas:
/var/
. Archivos de datos Nonmutable deben mantenerse en su directorio de aplicación en/usr/share/
o/usr/local/share/
o/opt/
/etc/
debe nunca se deben escribir en la aplicación cuando se está ejecutando, incluso si no tiene acceso de escritura a ellos./etc/
debería ser el repositorio de comportamientos predeterminados y nada más./usr/local/
,/opt/appname
o/home/username/appname
.Users\User\AppData
. En ningún otro lugar parece aceptable.~/Library/Preferences
junto con todos los archivos plist de las otras aplicaciones.plist
parece ser el formato preferido, pero querrá verificar con las pautas de Apple.No hay "mejor", para ser honesto. Solo hay limitaciones y expectativas específicas de la plataforma. Mi recomendación es seguir con los medios específicos de la plataforma, incluso si eso significa escribir más código.
fuente
%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: Raymond Chen, desarrollador de la API de Windows desde hace mucho tiempo, aborda esto y explica por qué el uso de archivos de texto sobre el registro no es un mejor patrón de diseño: ¿Por qué los archivos INI están en desuso a favor del registroEn Windows, use
%APPDATA%\appname
. En * NIX, use~/.appname
. No use nombres de directorio fijos en ninguna de las plataformas, ya que el directorio de inicio del usuario puede ser diferente del predeterminado (podría estar en la red, por ejemplo).En cuanto al formato, use lo que considere mejor. Esa es una decisión que solo usted puede tomar en el contexto de su solicitud. Es innecesario, y de hecho, desaconsejable, tener una forma "estándar" de hacerlo, si esa forma "estándar" no es lo mejor para su programa en particular.
Por ejemplo, XML / JSON podría ser una buena forma de almacenar datos / configuración del usuario si su aplicación ya usa XML / JSON para otra cosa. Pero si se trata de un archivo de configuración simple, ¿por qué agregar hinchazón a su aplicación introduciendo una dependencia? En ese caso, probablemente sea mejor usar un archivo de texto simple con
var: value\n
líneas.EDITAR: No hay una "mejor" forma portátil, ya que los sistemas operativos utilizan convenciones muy diferentes para esto. No rompas los estándares del sistema operativo sin una buena razón.
EDIT2: si te encuentras haciendo una configuración de todo el sistema en
/etc
oHKEY_LOCAL_MACHINE
, pregúntate si la configuración es realmente global. Luego espere 5 minutos y pregúntese nuevamente. Si la respuesta sigue siendo sí, entonces, por supuesto, haga una configuración global. Recuerde, un usuario normal no tiene acceso de escritura/etc
o,HKEY_LOCAL_MACHINE
y al hacer esto, se asegura de que alguien sin derechos de administrador no pueda instalar su aplicación.fuente
~/.config/applicaton
se está convirtiendo cada vez más en la ubicación preferida en * nix.~
lo hacen en~/.config/appname
.Intento mantenerme fuera del registro, está muy usado. Desearía que todos lo hicieran.
Me gusta mantener archivos de configuración xml o un archivo bin u ocasionalmente una base de datos local (SQLite).
fuente
Mi respuesta es una combinación de Chinmay de Kanchi respuesta y de BioBuckyBall respuesta .
XML / Json para configuraciones simples, SQLite para configuraciones complejas y más grandes estacionadas en la carpeta predeterminada de la aplicación del sistema operativo o la carpeta predeterminada del usuario del sistema operativo cuando las configuraciones dependen del usuario. Ambos podrían ser utilizados.
fuente
En Windows, mantendría la configuración de la aplicación en la
AppData
carpetafuente
La configuración del usuario suele estar en
Entonces, por ejemplo, la configuración de irssi es /home//.irssi/config
fuente
/home/<user>/etc/application
?~/.config/application
para ayudar a mantener las cosas consolidadas. Me inclino a estar de acuerdo con este movimiento.AppData
.Creo que es mejor usar el mecanismo preferido de plataforma específica. Por ejemplo, en OS X, el mecanismo preferido es colocar una lista de propiedades en ~ / Library / Preferences, y la API de Cocoa tiene una interfaz realmente simple para almacenar y recuperar configuraciones desde allí.
Si su aplicación es multiplataforma, puede abstraerlo con una clase o cualquier otra cosa.
fuente
Lo único que escribo en el registro es la ubicación de la aplicación, para que los instaladores y los actualizadores puedan encontrarla fácilmente. Todo lo demás se almacena en archivos en / AppData / Company / App
fuente
Para aplicaciones Java creo que gson es una buena opción. Cree sus objetos de configuración y use gson para convertirlos a JSON y viceversa. Tiene la ventaja de ser legible para el ser humano en lugar de un blob serializado.
Editar: ok, entonces tal vez no sea tan general ...
fuente
Si está escribiendo en .NET, puede usar System.Environment.SpecialFolders para averiguar qué ubicaciones de carpeta puede usar para guardar la configuración o incluso algunos datos.
fuente