Обработка пользовательских настроек с помощью MVVM
В настоящее время я разрабатываю приложение WPF
с фреймворком MVVM-light
.
В данный момент я устанавливаю свои настройки, как показано в следующем примере кода в моей viewmodel:
private string _property
public string Property
{
get { return _property; }
set
{
if (_property != value)
{
_property = value;
Settings.Default.Property = value;
RaisePropertyChanged("Property");
}
}
}
Я сохраняю свои настройки при выходе из приложения:
protected override void OnExit(ExitEventArgs e)
{
Settings.Default.Save();
}
Все работает, как задумано, но ...
Вопрос: это правильный подход или есть лучший способ обработки настроек в MVVM
2 ответа:
Если вы хотите изменить настройки на основе свойств вашего
ViewModel
, ваш подход будет работать. Единственная проблема заключается в том, что вашViewModel
тесно связан с классомSystem.Configuration.ApplicationSettingsBase
.Я бы создал класс-оболочку, реализующий интерфейс (скажем, IConfigProvider ), который предоставляет все ваши настройки в виде свойств и метода Save и вводит его в ваш
ViewModel
. Таким образом, вы можете передать макет \ stub при модульном тестировании вашегоViewModel
.Еще одно преимущество заключается в том, что если вы когда-либо решите изменить способ хранения ваших конфигурационных значений (скажем, вы хотите сохранить некоторые настройки в базе данных), вам не нужно прикасаться к вашему
ViewModels
, поскольку вся эта работа выполняется в вашемConfigProvider
классе.
Есть гораздо более простой способ... ну, "путь" тот же, но вместо того, чтобы добавлять настройку для каждого свойства, просто создайте класс
Settings
с всеми вашими свойствами... объявите их нормальными свойствами и реализуйте обычный интерфейсINotifyPropertyChanged
. затем, и вот в чем разница, создайте только один параметр для этого класса. Таким образом, его гораздо легче поддерживать.