Лучший способ предоставить настройки программного обеспечения?
Я использую С#.NET.
В моем программном обеспечении я предоставляю диалог настроек, через который пользователь может установить параметры приложения, которые я хочу сохранить в файле.
Требования (типичные):
- Каждый класс, который я определил, использует часть этих параметров. Таким образом, они должны быть глобальными для всех классов.
- Они должны загружаться при запуске программного обеспечения.
- Когда пользователь меняет настройки и нажимает "save" / "apply". Текущие настройки должны измениться.
Мне интересно, что это лучший способ сделать это? Кроме того, что является лучшим способом сохранить эти настройки на диске? Я хотел бы создать объект класса Settings
и сериализовать его на 'settings.dat' или предоставить структурированный файл, такой как XML/JSON
Это требуется для почти любого другого программного обеспечения. Итак, нет ли шаблона проектирования для этого?
EDIT:
Ну, это то, чего я не знал. Мило:). Но скажите, что в то время как пользователь использует программное обеспечение посередине, он меняет настройки, тогда все остальные объекты, которые используют эти глобальные свойства .Settings.Default. *, Должны быть изменены. Есть ли какой-либо механизм уведомления? Какое-то событие?
Ответы
Ответ 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, чтобы переместить настройки из предыдущей версии в более новую. Просто убедитесь, что вы вызываете его только один раз (возможно, из установщика).
Настройки также могут быть ограничены элементами управления, поэтому вам не придется вручную сопоставлять их с элементами управления.