Estoy experimentando con MVVM por primera vez y realmente me gusta la separación de responsabilidades. Por supuesto, cualquier patrón de diseño solo resuelve muchos problemas, no todos. Así que estoy tratando de averiguar dónde almacenar el estado de la aplicación y dónde almacenar los comandos de toda la aplicación.Dónde almacenar la configuración/estado de la aplicación en una aplicación MVVM
Digamos que mi aplicación se conecta a una URL específica. Tengo una ConnectionWindow y un ConnectionViewModel que admiten la recopilación de esta información del usuario y la invocación de comandos para conectarse a la dirección. La próxima vez que se inicie la aplicación, quiero volver a conectarme a esta misma dirección sin preguntar al usuario.
Mi solución hasta ahora es crear un ApplicationViewModel que proporciona un comando para conectarse a una dirección específica y guardar esa dirección en algún almacenamiento persistente (donde se guarda realmente es irrelevante para esta pregunta). A continuación se muestra un modelo de clase abreviado.
La vista de la aplicación del modelo:
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;
}
...
}
La conexión de vista del modelo:
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; }
...
}
Así que la pregunta es la siguiente: ¿Es un ApplicationViewModel la manera correcta de manejar esto? ¿De qué otra forma podría almacenar el estado de la aplicación?
EDIT: Me gustaría saber también cómo esto afecta la capacidad de prueba. Una de las principales razones para usar MVVM es la capacidad de probar los modelos sin una aplicación host. Específicamente, me interesa saber cómo la configuración centralizada de la aplicación afecta la capacidad de prueba y la capacidad de burlarse de los modelos dependientes.
En realidad, he estado revisando el código Onyx durante los últimos días para obtener información sobre WPF. Definitivamente está explicado mucho de cómo pienso y he aprendido bastante. –
Gracias. Incluso si no usa Onyx, espero que las ideas sean útiles. Onyx ciertamente no es necesario aquí, aunque la solución de interfaz de servicio creo que realmente es lo que estás buscando. – wekempf