Я экспериментирую с MVVM в первый раз и очень люблю разделение обязанностей. Конечно, любой шаблон дизайна решает многие проблемы - не все. Поэтому я пытаюсь выяснить, где хранить состояние приложения и где хранить приложения с широкими командами.
Допустим, мое приложение подключается к определенному URL-адресу. У меня есть ConnectionWindow и ConnectionViewModel, которые поддерживают сбор этой информации от пользователя и вызывают команды для подключения к этому адресу. В следующий раз, когда приложение запустится, я хочу снова подключиться к этому же адресу, не запрашивая пользователя.
Мое решение до сих пор заключается в создании ApplicationViewModel, который предоставляет команду для подключения к определенному адресу и сохранения этого адреса в каком-то постоянном хранилище (там, где он фактически был сохранен, не имеет значения для этого вопроса). Ниже приведена сокращенная модель класса.
Модель представления приложения:
public class ApplicationViewModel : INotifyPropertyChanged
{
public Uri Address{ get; set; }
public void ConnectTo( Uri address )
{
// Connect to the address
// Save the addres in persistent storage for later re-use
Address = address;
}
...
}
Модель вида подключения:
public class ConnectionViewModel : INotifyPropertyChanged
{
private ApplicationViewModel _appModel;
public ConnectionViewModel( ApplicationViewModel model )
{
_appModel = model;
}
public ICommand ConnectCmd
{
get
{
if( _connectCmd == null )
{
_connectCmd = new LambdaCommand(
p => _appModel.ConnectTo( Address ),
p => Address != null
);
}
return _connectCmd;
}
}
public Uri Address{ get; set; }
...
}
Итак, вопрос заключается в следующем: Является ли ApplicationViewModel правильным способом справиться с этим? Как еще вы можете сохранить состояние приложения?
EDIT: Я хотел бы также знать, как это влияет на тестируемость. Одной из основных причин использования MVVM является возможность тестирования моделей без приложения-хозяина. В частности, меня интересует понимание того, как централизованные настройки приложения влияют на тестируемость и возможность издеваться над зависимыми моделями.