0

Есть окно на котором 4 функции программы которые можно настраивать (см. скриншот). Проблема заключается в сохранении всех этих настроек. Как лучше реализовать сохранение настроек? Сейчас у меня 3 выбора:

  1. Сериализовывать и записывать в settings.json состояние объектов
  2. Реест
  3. БД

Но все способы мне кажутся проигрышными, файл можно удалить и тогда мне влетит от начальства, в реест лезть вообще не хочется (боюсь), а клепать миллион таблиц в бд под каждую специфическую настройку ну уж совсем не хочется

Aarnihauta
  • 2,326
  • 3
  • 12
  • 23
  • Я же вам показывал, как в реестр писать - https://ru.stackoverflow.com/a/1348911/373567, чего там страшного? В файле не должно быть данных, следовательно его удаление не должно быть критичным. Если определенное состояние настроек критично, то настройте их по умолчанию так, чтобы не было проблем в случае потери конфига. То есть расставьте галочки там так, чтобы при первом запуске приложения их надо было как можно реже переключать. БД - хороший вариант, если у вас там лежат профили пользователей. При полном сносе системы и переустановке приложения, настройки выживут в БД. – aepot Dec 16 '21 at 12:15
  • Да, помню на счет реестра, но всё равно как-то не хотелось бы туда лезть. А на счет бд, мне кажется какой-то плохой практикой делать много таблиц для настроек, мне кажется запутаться можно очень быстро в таком количестве сущностей – Aarnihauta Dec 16 '21 at 12:19
  • 1
    Исправьте UX, инвертируйте чекбоксы, сделайте "Включено" с включенной галочкой. У вас наоборот и сбивает с толку. Кстати, в этом случае надпись чекбокса можно убрать, разместить чекбоксы слева и сделать их надписью сам текст опции. – aepot Dec 16 '21 at 12:19
  • Зачем много таблиц? Одной хватит, той что с юзерами. Если не хочется мигрировать базу при изменении состава настроек, можете хоть в виде того же JSON в одно поле класть. Либо если БД поддерживает JSON документы, то даже запросами из документа можно настройки будет доставать прямо через SQL. – aepot Dec 16 '21 at 12:25
  • @aepot ну там не совсем настройки юзеров, программа в целом выглядит как куча "микро-программ" которые что-то там свое делают не зависимо друг от друга. В курсе про микросервесную архитектуру, но ничего из wpf я не нагуглил и принял решение делать так, как знаю (пока еще никак не сделал). А на счет файлов json в бд не совсем понял, хранить как строку в бд nvarchar(max)? Или что-то другое? – Aarnihauta Dec 16 '21 at 12:33
  • Зависит от типа БД, например MySQL поддерживает JSON. – aepot Dec 16 '21 at 12:37
  • Я использую MS SQL – Aarnihauta Dec 16 '21 at 12:37
  • 1
  • 1
    То, где и как будут храниться настройки, зависит от того, какой тип проекта, какие у него возможности и какие у него пользователи. Допустим, если это портативный проект, где все в виде 1-го .exe, где из настроек только "размер экрана" или аналогичное, то смысл нагружать базу, засорять реестр и др? Достаточно ведь простого файлика рядом с самим .exe. Если настройки секретные (пароли и др.), то стоит уже подумать про использование специальных механизмов, самое базовое "Секреты пользователя". Ну а база, она хороша если надо восстановить после переустановки все настройки пользователя. – EvgeniyZ Dec 16 '21 at 13:03
  • Вообще, для того же ASP Microsoft написала очень много собственных механизмов, под которые многие пишут свои библиотеки и др. расширения. Они доступны и в любом другом проекте, достаточно установить нужный пакет. Например настройки, это IConfiguration из пакетов (Microsoft.Extensions.Configuration), логирование, это ILogger (Microsoft.Extensions.Logging), даже свой контейнер есть (Microsoft.Extensions.DependencyInjection) и т.д. Поэтому, я наверно советую в первую очередь посмотреть на эти решения, а уж затем искать и разрабатывать сторонние. – EvgeniyZ Dec 16 '21 at 13:07
  • @EvgeniyZ программа будет иметь секретные пароли. Не понял, что за "секреты пользователя". кто будет пользоваться программой - неизвестно, мне и самому не сообщили, но ясно, что вне предприятия эта программа использоваться не будет. Смысл проекта - электронный документооборот – Aarnihauta Dec 16 '21 at 13:07
  • @EvgeniyZ в проекте не используется ASP, а из WPF я знаю только про существование Prism, MVVM Light – Aarnihauta Dec 16 '21 at 13:09
  • 1
    Я немного не так выразился (поправил), Microsoft под ASP делали все это, но распространяется в виде простых NuGet проектов, которые отлично работают на любом другом виде проекта. что за "секреты пользователя" - Безопасное хранение секретов приложения, только учтите, что это не шифрование или что-либо еще, это просто отдельная папка в OS, где в виде отдельного JSON пишутся эти настройки. Если нужна прям защита, то подумайте про шифрование и прочее. Опять же, там про ASP, но спокойно делается хоть в консольном проекте. – EvgeniyZ Dec 16 '21 at 13:14
  • электронный документооборот, вне предприятия эта программа использоваться не будет - ну вот теперь думайте, какие настройки там будут. Если простые настройки интерфейса - то достаточно файлика рядом с .exe, если настройки оборудования - то наверно это должно хранится рядом с оборудованием) Судя по скрину в вопросе, то это простые "фильтры" для вывода той или иной информации, а значит простые настройки UI, из за чего я бы наверно сделал простым файлом рядом с .exe, не засоряя базу, реестр, систему. – EvgeniyZ Dec 16 '21 at 13:17
  • @EvgeniyZ ну, пока про все настройки неизвестно, но они рода "установить интервал, выбрать директорию, выбрать человека который будет подписывать документы". Есть еще настройки подключения к БД (сервер, название бд, логин, пароль). Не совсем понятно, что вы имеете в виду под фразой "настройки оборудования" – Aarnihauta Dec 16 '21 at 13:25
  • Исходя из ваших слов, настройки у вас чисто интерфейса и отображения, а значит их и сохранять между сессиями (переустановка программы, например) не нужно, из-за чего базу использовать для этого бессмысленно (лишняя нагрузка). Остается либо файл, либо реестр. Я лично любитель портативности, поэтому буду за файл рядом с .exe (только не забывайте еще и про несколько учеток на 1-м компе). настройки оборудования - я размышлял что там может быть. Например, у вас есть удаленный датчик температуры, к которому пишется софт с функционалом его калибровки, вот данные калибровки должны быть на устройстве – EvgeniyZ Dec 16 '21 at 13:34
  • @EvgeniyZ никаких аппаратных частей не намечается в ближайшем времени. Спасибо!! – Aarnihauta Dec 16 '21 at 13:37

0 Answers0