Сохранение настроек программы
От: borga  
Дата: 25.10.19 08:30
Оценка:
Вопрос конечно не только C# касается, но т.к. у C# есть свои встроенные механизмы напишу здесь.
Вопросов на самом деле два:
1. Хранение настроек в файле
2. Хранение настроек в самой программе

Напишу как сейчас реализовано у меня в текущем проекте(хотя это конечно слишком громко сказано).

Настройки я храню в ini файле.
Получилось это так по нескольким причинам:
1. программа предназначена для админов, а у них в основном ini файлы, и для них это понятный формат
2. В файле одном хранятся несколько вариантов части настроек для разных случаев
3. В настройках есть параметры типа массива произвольной длины
В последнее время подумываю о переходе на json.

В программе настройки хранятся в глобальном статическом классе.
Настройки считываются при запуске программы, сохраняются при изменении настроек.

Хотелось бы узнать как правильно/лучше.
Может быть есть в интернете информация по этой теме, я пока не нашел.

Просьба сильно не пинать.
Я не волшебник, я только учусь!
Re: Сохранение настроек программы
От: Ночной Смотрящий Россия  
Дата: 25.10.19 09:17
Оценка: 8 (1) +1
Здравствуйте, borga, Вы писали:

B>Хотелось бы узнать как правильно/лучше.

B>Может быть есть в интернете информация по этой теме, я пока не нашел.

https://benfoster.io/blog/net-core-configuration-legacy-projects
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Сохранение настроек программы
От: Kolesiki  
Дата: 25.10.19 09:17
Оценка:
Здравствуйте, borga, Вы писали:

B>Хотелось бы узнать как правильно/лучше.


Вот про JSON ты очень правильно подумал! Не надо цепляться за ini только потому, что паре динозавров "так удобнее". Им вообще нечего делать в настройках, это должен делать UI.
У JSON'а есть одна шикарная фича: десериализация некоторых(!) мемберов и применение этих величин к уже существующему объекту.
Проще примером:

объект "Настройки"
-Поле1
-Поле2


В файле у тебя ТОЛЬКО "Поле1". Так вот ты можешь десериализовать этот файл ПОВЕРХ значений в объекте "Настройки" (т.е. Поле2 не перезапишется).
Re: Сохранение настроек программы
От: Буравчик Россия  
Дата: 25.10.19 10:02
Оценка:
Здравствуйте, borga, Вы писали:

B>Вопросов на самом деле два:

B>1. Хранение настроек в файле
B>2. Хранение настроек в самой программе
B>В последнее время подумываю о переходе на json.

Не надо использовать чистый json для файлов конфигурации!
Используй что-то типа Hjson. Он включает в себя обычный json, но прощает кучу типичных ошибок, которые делает человек, когда пишет json вручную. И вообще, позволяет писать более удобные конфиги. Парсеры для этого формата есть для большинства языков.
Best regards, Буравчик
Re[2]: json НЕ дает коментарии вставлять
От: VladCore  
Дата: 25.10.19 10:40
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, borga, Вы писали:


B>>Хотелось бы узнать как правильно/лучше.

B>>Может быть есть в интернете информация по этой теме, я пока не нашел.

НС>https://benfoster.io/blog/net-core-configuration-legacy-projects


Ему хочется чтоб админы руками правили — никаких json

Или xml или yaml — и там и там можно коментами документацию всунуть
Re[2]: Сохранение настроек программы
От: VladCore  
Дата: 25.10.19 10:47
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Им вообще нечего делать в настройках, это должен делать UI.


Как раз файлы настроек это UI — User Interface на 146%.
Re[3]: json НЕ дает коментарии вставлять
От: Ночной Смотрящий Россия  
Дата: 25.10.19 11:02
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Ему хочется чтоб админы руками правили — никаких json


Там, по ссылке, на выбор.

VC>Или xml или yaml — и там и там можно коментами документацию всунуть


Там можно в json комменты тоже.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Сохранение настроек программы
От: alexzzzz  
Дата: 25.10.19 14:41
Оценка:
Здравствуйте, borga, Вы писали:

B>В последнее время подумываю о переходе на json.


Я задолбался при ручной правке json расставлять и удалять лишние запятые внутри списков. Xml хоть и многословнее, но как-то мне его руками править проще.
Отредактировано 25.10.2019 14:42 alexzzzz . Предыдущая версия .
Re[2]: Сохранение настроек программы
От: Danchik Украина  
Дата: 26.10.19 08:34
Оценка:
Здравствуйте, alexzzzz, Вы писали:

A>Здравствуйте, borga, Вы писали:


B>>В последнее время подумываю о переходе на json.


A>Я задолбался при ручной правке json расставлять и удалять лишние запятые внутри списков. Xml хоть и многословнее, но как-то мне его руками править проще.


А почему вы не рассматриваете как вариант YAML. Он повсюду использутся в linux мире как раз для таких случаев.
Re: Сохранение настроек программы
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.10.19 15:18
Оценка:
Здравствуйте, borga, Вы писали:

B>3. В настройках есть параметры типа массива произвольной длины

B>В последнее время подумываю о переходе на json.

.ini приятнее человеческому глазу, чем json.

B>В программе настройки хранятся в глобальном статическом классе.

B>Настройки считываются при запуске программы, сохраняются при изменении настроек.

А если не прочлись, программа молча падает?

Настройки лучше читать тогда, когда программа уже достаточно проинициализировалась, чтобы она смогла вменяемым образом пожаловаться на свою тяжелую жизнь.
Re[4]: json НЕ дает коментарии вставлять
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.10.19 15:19
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Там можно в json комменты тоже.


В стандартном json'е нельзя. Бывают расширения, в которых можно.
Re[5]: json НЕ дает коментарии вставлять
От: Ночной Смотрящий Россия  
Дата: 26.10.19 15:41
Оценка:
Здравствуйте, Pzz, Вы писали:

НС>>Там можно в json комменты тоже.

Pzz>В стандартном json'е нельзя. Бывают расширения, в которых можно.

Ключевое слово я выделил.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Сохранение настроек программы
От: alexzzzz  
Дата: 27.10.19 18:44
Оценка:
Здравствуйте, Danchik, Вы писали:

B>>>В последнее время подумываю о переходе на json.

A>>Я задолбался при ручной правке json расставлять и удалять лишние запятые внутри списков. Xml хоть и многословнее, но как-то мне его руками править проще.
D>А почему вы не рассматриваете как вариант YAML. Он повсюду использутся в linux мире как раз для таких случаев.

Приходится копаться в чужих json-файлах.

А когда надо для себя сохранять десяток значений в файле, пишу в xml. Он есть по умолчанию, не вижу смысла заморачиваться.
Re[2]: Сохранение настроек программы
От: borga  
Дата: 28.10.19 06:38
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.