Який найкращий спосіб (та місцеположення) для зберігання налаштувань, які не є BLOB?
У Windows видається прийнятним використовувати реєстр. На мою думку, реєстр був погано розробленою системою, і замість цього Users\Username\AppData
слід віддавати перевагу простому текстовому файлу в каталозі. Це легше створити резервну копію, менш небезпечно для користувачів модифікувати та легше очистити.
У Linux та більшості Unixes кращим місцем розташування є /home/user/.config/appname
специфічні для користувача настройки та /etc/
глобальні (загальносистемні) налаштування. Менш переважне (але прийнятне) місце розташування для налаштувань користувача є ~/.appname
, але це, як правило, не сприятливо. Ці файли повинні редагуватися користувачем, тому формат, прочитаний людиною, завжди є кращим.
Я не погоджуюсь з більшістю людей, що XML є прийнятним форматом для зберігання даних, що не стосуються блоку. На мій погляд, це завищений і надмірно складний формат для того, що зазвичай закінчується дуже маленькими фрагментами структурованих даних. Я вважаю за краще бачити файли в YAML, JSON, ASN.1, імені = пари значень або подібних форматах. Занадто багато синтаксису дозволяє занадто легко користувачеві зіпсувати та залишити файл у недійсному форматі.
Чи слід дотримуватися кожного системного замовчування чи мати єдине рішення?
Це повністю залежить від вас, але пам’ятайте про деякі речі:
- Платформи на зразок * nix мають суворі обмеження, у яких місцях можна записати. Більш суворий, ніж Windows. Так:
- Єдине місце, до якого ви повинні написати що-небудь, - це домашній каталог користувача.
- Якщо ваша програма не є системною послугою; у цьому випадку всі файли даних, що змінюються, повинні бути записані в
/var/
. Nonmutable файли даних повинні зберігатися в директорії додатку в /usr/share/
або /usr/local/share/
або/opt/
- Файли в
/etc/
не повинні ніколи бути записані додатком , коли він працює, навіть якщо він має доступ на запис до них. /etc/
має бути сховищем для поведінки за замовчуванням і нічого іншого.
- План для вашого застосування , які будуть встановлені в одному з трьох місць:
/usr/local/
, /opt/appname
або /home/username/appname
.
- Краплі повинні зберігатися поряд з іншими файлами конфігурації, якщо їх потрібно змінити. Як правило, бажано використовувати формат, редагуваний користувачем, тому щось на зразок SQLite або Berkeley DB є кращим (оскільки для кожного є інструменти командного рядка), але це не обов'язково.
- У Windows ваші програми повинні коли-небудь писати лише в каталозі користувача. Стандартизоване розташування файлів даних є
Users\User\AppData
. Ніде більше це не здається прийнятним.
- На Mac OS X налаштування програми слід зберігати
~/Library/Preferences
разом з усіма списками файлів інших програм. plist
здається, що це кращий формат, але ви хочете ще раз перевірити відповідність інструкцій Apple
І який найкращий портативний спосіб?
Немає "найкращого", якщо чесно. Існують лише обмеження та очікування щодо платформи. Моя рекомендація - дотримуватися конкретних платформних засобів, навіть якщо це означає писати більше коду.