Вопрос конечно не только C# касается, но т.к. у C# есть свои встроенные механизмы напишу здесь.
Вопросов на самом деле два:
1. Хранение настроек в файле
2. Хранение настроек в самой программе
Напишу как сейчас реализовано у меня в текущем проекте(хотя это конечно слишком громко сказано).
Настройки я храню в ini файле.
Получилось это так по нескольким причинам:
1. программа предназначена для админов, а у них в основном ini файлы, и для них это понятный формат
2. В файле одном хранятся несколько вариантов части настроек для разных случаев
3. В настройках есть параметры типа массива произвольной длины
В последнее время подумываю о переходе на json.
В программе настройки хранятся в глобальном статическом классе.
Настройки считываются при запуске программы, сохраняются при изменении настроек.
Хотелось бы узнать как правильно/лучше.
Может быть есть в интернете информация по этой теме, я пока не нашел.
Просьба сильно не пинать.
Я не волшебник, я только учусь!
Здравствуйте, borga, Вы писали:
B>Хотелось бы узнать как правильно/лучше.
Вот про JSON ты очень правильно подумал! Не надо цепляться за ini только потому, что паре динозавров "так удобнее". Им вообще нечего делать в настройках, это должен делать UI.
У JSON'а есть одна шикарная фича: десериализация некоторых(!) мемберов и применение этих величин к уже существующему объекту.
Проще примером:
объект "Настройки"
-Поле1
-Поле2
В файле у тебя ТОЛЬКО "Поле1". Так вот ты можешь десериализовать этот файл ПОВЕРХ значений в объекте "Настройки" (т.е. Поле2 не перезапишется).
Здравствуйте, borga, Вы писали:
B>Вопросов на самом деле два: B>1. Хранение настроек в файле B>2. Хранение настроек в самой программе B>В последнее время подумываю о переходе на json.
Не надо использовать чистый json для файлов конфигурации!
Используй что-то типа Hjson. Он включает в себя обычный json, но прощает кучу типичных ошибок, которые делает человек, когда пишет json вручную. И вообще, позволяет писать более удобные конфиги. Парсеры для этого формата есть для большинства языков.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, borga, Вы писали:
B>>Хотелось бы узнать как правильно/лучше. B>>Может быть есть в интернете информация по этой теме, я пока не нашел.
НС>https://benfoster.io/blog/net-core-configuration-legacy-projects
Ему хочется чтоб админы руками правили — никаких json
Или xml или yaml — и там и там можно коментами документацию всунуть
Здравствуйте, borga, Вы писали:
B>В последнее время подумываю о переходе на json.
Я задолбался при ручной правке json расставлять и удалять лишние запятые внутри списков. Xml хоть и многословнее, но как-то мне его руками править проще.
Здравствуйте, alexzzzz, Вы писали:
A>Здравствуйте, borga, Вы писали:
B>>В последнее время подумываю о переходе на json.
A>Я задолбался при ручной правке json расставлять и удалять лишние запятые внутри списков. Xml хоть и многословнее, но как-то мне его руками править проще.
А почему вы не рассматриваете как вариант YAML. Он повсюду использутся в linux мире как раз для таких случаев.
Здравствуйте, borga, Вы писали:
B>3. В настройках есть параметры типа массива произвольной длины B>В последнее время подумываю о переходе на json.
.ini приятнее человеческому глазу, чем json.
B>В программе настройки хранятся в глобальном статическом классе. B>Настройки считываются при запуске программы, сохраняются при изменении настроек.
А если не прочлись, программа молча падает?
Настройки лучше читать тогда, когда программа уже достаточно проинициализировалась, чтобы она смогла вменяемым образом пожаловаться на свою тяжелую жизнь.
Здравствуйте, Danchik, Вы писали:
B>>>В последнее время подумываю о переходе на json. A>>Я задолбался при ручной правке json расставлять и удалять лишние запятые внутри списков. Xml хоть и многословнее, но как-то мне его руками править проще. D>А почему вы не рассматриваете как вариант YAML. Он повсюду использутся в linux мире как раз для таких случаев.
Приходится копаться в чужих json-файлах.
А когда надо для себя сохранять десяток значений в файле, пишу в xml. Он есть по умолчанию, не вижу смысла заморачиваться.
Здравствуйте, Pzz, Вы писали:
Pzz>.ini приятнее человеческому глазу, чем json.
Да, но настройки состоят из нескольких под настроек.
Т.е. есть глобальные настройки:
[Global]
param1 = xxxx
param2 = yyyy
и т.д
И есть настройки для каждого сервера например:
[Servers]
ServersCount = 2
[Server1]
ServerName = qq
ServerIP = www
Counter = 25
ServerParam1 = www
ServerParam2 = www
[Server2]
ServerName = qq
ServerIP = www
Counter = 30
ServerParam1 = www
ServerParam2 = www
Pzz>А если не прочлись, программа молча падает?
Если не прочлись программа не падает.
Pzz>Настройки лучше читать тогда, когда программа уже достаточно проинициализировалась, чтобы она смогла вменяемым образом пожаловаться на свою тяжелую жизнь.
Сразу же после загрузки все переменные в которых хранятся настройки инициализируются параметрами по умолчанию.
После чего проверяется наличие файла настроек.
Если файл настроек отсутствует программа продолжает работать с настройками по умолчанию.
Далее если в окне настроек нажать кнопку "Сохранить", происходит обновление переменных в которых хранятся настройки, и производится сохранение настроек в файл(если файл отсутствует — он будет создан).
P.S.
Имя файла настроек совпадает с именем файла приложения но имеет расширение ini.