Qual é a melhor maneira (e local) de armazenar configurações que não sejam BLOB?
No Windows, parece aceitável usar o registro. Na minha opinião, o registro era um sistema mal planejado e, em vez disso, um arquivo de texto simples no Users\Username\AppData
diretório deveria ser preferido. É mais fácil fazer backup, menos perigoso para os usuários modificarem e mais fáceis de limpar.
No Linux e na maioria dos Unixes, o local preferido é /home/user/.config/appname
para configurações específicas do usuário e /etc/
para configurações globais (em todo o sistema). O local menos preferido (mas aceitável) para as configurações do usuário é ~/.appname
, mas isso geralmente está desvalorizando. Esses arquivos devem ser editáveis pelo usuário, portanto, sempre é preferível um formato legível por humanos.
Eu discordo da maioria das pessoas de que XML é um formato aceitável para armazenar dados que não são de blob. É, na minha opinião, um formato exagerado e excessivamente complexo para o que geralmente acaba sendo pedaços muito pequenos de dados estruturados. Prefiro ver arquivos em YAML, JSON, ASN.1, pares nome = valor ou formatos semelhantes. Ter muita sintaxe facilita demais o usuário bagunçar e deixar o arquivo em um formato inválido.
Devemos seguir cada padrão do sistema ou ter uma solução unificada?
Isso depende inteiramente de você, mas lembre-se de algumas coisas:
- Plataformas como * nix têm limitações estritas sobre quais locais são graváveis. Mais rigoroso que o Windows. Então:
- O único local para o qual você deve escrever é no diretório inicial do usuário.
- A menos que seu aplicativo seja um serviço do sistema; nesse caso, todos os arquivos de dados mutáveis devem ser gravados
/var/
. Arquivos de dados Nonmutable deve ser mantido em seu diretório app em /usr/share/
ou /usr/local/share/
ou/opt/
- Os arquivos de configuração nunca
/etc/
devem ser gravados pelo aplicativo quando estiver em execução, mesmo que ele tenha acesso de gravação. deve ser o repositório para comportamentos padrão e nada mais./etc/
- Plano para o seu aplicativo a ser instalado em um dos três locais:
/usr/local/
, /opt/appname
ou /home/username/appname
.
- Os blobs devem ser armazenados ao lado de outros arquivos de configuração, caso sejam alterados. Geralmente, é preferível usar um formato editável pelo usuário; portanto, é preferível algo como SQLite ou Berkeley DB (já que existem ferramentas de linha de comando para cada um), mas não é obrigatório.
- No Windows, seus aplicativos só devem escrever no diretório Usuário. O local padronizado para arquivos de dados é
Users\User\AppData
. Em nenhum outro lugar parece aceitável.
- No Mac OS X, as configurações do seu aplicativo devem ser armazenadas
~/Library/Preferences
junto com todos os arquivos plist dos outros aplicativos. plist
parece ser o formato preferido, mas convém verificar com as diretrizes da Apple.
E qual é a melhor maneira portátil?
Não há "melhor", para ser honesto. Existem apenas limitações e expectativas específicas da plataforma. Minha recomendação é seguir os meios específicos da plataforma, mesmo que isso signifique escrever mais código.