Лучший способ предоставить настройки программного обеспечения? - PullRequest
12 голосов
/ 31 марта 2010

Я использую C # .NET.

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

Требования (типовые):

  1. Каждый определенный мной класс использует некоторую часть этих настроек. Таким образом, они должны быть глобальными для всех классов.
  2. Они должны быть загружены во время запуска программного обеспечения.
  3. Когда пользователь изменяет настройки и нажимает «Сохранить» / «Применить». Текущие настройки должны измениться.

Мне интересно, как лучше всего это сделать? Кроме того, каков наилучший способ сохранить эти настройки на диск? Я имею в виду, должен ли я создать объект класса Settings и сериализовать его в «settings.dat» или предоставить структурированный файл, такой как XML / JSON

Это требуется почти для любого другого программного обеспечения. Итак, нет ли шаблона для этого?

EDIT:

Ну, это то, чего я не знал. Мило :). Но, скажем, когда пользователь использует программное обеспечение посередине, он меняет настройки, тогда все остальные объекты, которые используют эти глобальные свойства Properties.Settings.Default. *, Должны быть изменены. Есть ли какой-нибудь механизм уведомления? Какое-то событие?

Ответы [ 5 ]

13 голосов
/ 31 марта 2010

.Net проекты уже имеют понятие «Настройки», ориентированное на пользователя или приложение, которое будет отвечать всем вашим требованиям, указанным выше. Есть классы для чтения и записи настроек. Я настоятельно рекомендую вам взглянуть на них, а не сворачивать что-то самостоятельно.

Использование настроек в C #

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

7 голосов
/ 31 марта 2010

Класс Settings, поставляемый с .Net, очень удобен, и я использую его для большинства своих проектов. Единственное, на что следует обратить внимание - каждая новая версия приложения получает свой собственный файл настроек, поэтому убедитесь, что у вас есть разумные значения по умолчанию. Все настройки исчезают при распространении нового EXE-файла.

С глобальным состоянием очень трудно разобраться правильно, поэтому я обычно передаю соответствующие настройки различным объектам в их конструкторах или в свойствах. И я обычно не применяю изменения настроек к этим объектам, поскольку во многих случаях объекту очень сложно разумно иметь дело с изменением настроек. Скорее, я просто использую новые настройки для новых объектов по мере их создания. Если параметр должен быть применен немедленно, тогда я просто сбрасываю старый объект и создаю новый. Это зависит только от деталей заявки.

Если на экране настроек есть кнопка «Применить», я бы порекомендовал перезагрузить и отобразить все значения после их сохранения. Таким образом, дисплей обязательно будет содержать именно то, что на самом деле сохранено. Это может быть важно, если проанализированы какие-либо настройки. У меня были пользователи, которые вводили комбинацию месяца и дня в определенное поле, и формат, который они использовали, отличался от ожидаемого, поэтому сохраненное значение было неверным. При обновлении экрана после «Применить» ошибки такого рода можно сделать очевидными.

Надеюсь, это поможет!

3 голосов
/ 31 марта 2010

Вы и Womp оба правы:

Вы должны создать класс настроек, который является фасадом поверх настроек .NET. Таким образом, вы получаете лучшее из обоих миров: тестируемость решения, созданного вручную, и простота реализации, обычно ассоциируемая с Microsoft Silver Bullets.

0 голосов
/ 31 марта 2010

Как и предполагали другие, использовать функцию «Настройки» - это путь. Настройки также предоставляют события, когда они обновляются, чтобы вы могли обрабатывать их и предпринимать необходимые действия. Вы также можете использовать метод Upgrade , чтобы переместить настройки из предыдущей версии в более новую. Просто убедитесь, что вы вызываете его только один раз (возможно, из установщика).

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

0 голосов
/ 31 марта 2010

Я бы лично пошел по маршруту Properties.Settings. Добавьте файл настроек в папку «Свойства» вашего приложения. Это позволяет легко добавлять элементы в файл app.config вашего приложения. Существует встроенный класс .net, который вы можете использовать для чтения / записи значений, найденных в файле настроек. Затем вы можете написать небольшой класс-оболочку, который инкапсулирует эту функциональность, или просто использовать встроенный .net один повсеместно.

Лично я бы создал потокобезопасный класс Singleton, который использует небольшой класс-оболочку над встроенным .net. Да, это некоторая дополнительная работа, но она небольшая и дает вам большую мощь в вашем приложении для небольшой работы.

Изменить: Извините, забыл включить ссылку на настройки MSDN.

http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...