Sto sperimentando MVVM per la prima volta e mi piace molto la separazione delle responsabilità. Naturalmente qualsiasi schema di progettazione risolve solo molti problemi, non tutti. Quindi sto cercando di capire dove memorizzare lo stato dell'applicazione e dove archiviare i comandi a livello di applicazione.Dove memorizzare le impostazioni/lo stato dell'applicazione in un'applicazione MVVM
Diciamo che la mia applicazione si collega a un URL specifico. Ho un ConnectionWindow e un ConnectionViewModel che supportano la raccolta di queste informazioni da parte dell'utente e il richiamo di comandi per connettersi all'indirizzo. La prossima volta che l'applicazione si avvia, desidero riconnettermi allo stesso indirizzo senza chiedere conferma all'utente.
La mia soluzione finora è creare un ApplicationViewModel che fornisca un comando per connettersi a un indirizzo specifico e per salvare quell'indirizzo in una memoria persistente (dove è effettivamente salvato è irrilevante per questa domanda). Di seguito è riportato un modello di classe abbreviato.
visualizzazione applicazione del modello:
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 vista di collegamento modello:
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; }
...
}
Quindi la domanda è questa: un ApplicationViewModel è il modo giusto per gestire questa situazione? In quale altro modo è possibile memorizzare lo stato dell'applicazione?
MODIFICA: Mi piacerebbe sapere anche come questo influenzi la testabilità. Uno dei motivi principali per l'utilizzo di MVVM è la possibilità di testare i modelli senza un'applicazione host. Nello specifico, sono interessato a capire in che modo le impostazioni centralizzate dell'app influiscono sulla testabilità e sulla capacità di prendere in giro i modelli dipendenti.
Negli ultimi giorni sto riversando il codice Onyx per raccogliere informazioni su WPF. È decisamente definito come penso e ho imparato un bel po '. –
Grazie. Anche se non usi Onyx, spero che le idee siano utili. Onyx non è certamente necessario qui, anche se la soluzione dell'interfaccia di servizio credo sia davvero quella che stai cercando. – wekempf