Подтвердить что ты не робот

Лучший способ предоставить настройки программного обеспечения?

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

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

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

  • Каждый класс, который я определил, использует часть этих параметров. Таким образом, они должны быть глобальными для всех классов.
  • Они должны загружаться при запуске программного обеспечения.
  • Когда пользователь меняет настройки и нажимает "save" / "apply". Текущие настройки должны измениться.

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

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

EDIT:

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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