Ich experimentiere zum ersten Mal mit MVVM und mag die Trennung der Verantwortlichkeiten sehr. Natürlich löst jedes Entwurfsmuster nur viele Probleme - nicht alle. Ich versuche also herauszufinden, wo der Anwendungsstatus und wo die anwendungsweiten Befehle gespeichert werden sollen.
Angenommen, meine Anwendung stellt eine Verbindung zu einer bestimmten URL her. Ich habe ein ConnectionWindow und ein ConnectionViewModel, die das Sammeln dieser Informationen vom Benutzer und das Aufrufen von Befehlen zur Verbindung mit der Adresse unterstützen. Wenn die Anwendung das nächste Mal startet, möchte ich die Verbindung zu derselben Adresse erneut herstellen, ohne den Benutzer dazu aufzufordern.
Meine bisherige Lösung besteht darin, ein ApplicationViewModel zu erstellen, das einen Befehl zum Herstellen einer Verbindung mit einer bestimmten Adresse und zum Speichern dieser Adresse in einem dauerhaften Speicher bereitstellt (wo sie tatsächlich gespeichert wird, ist für diese Frage irrelevant). Unten ist eine verkürzte Klasse Modell.
Das Modell der Anwendungsansicht:
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;
}
...
}
Das Modell der Verbindungsansicht:
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; }
...
}
Die Frage ist also die folgende: Ist ein ApplicationViewModel der richtige Weg, dies zu handhaben? Wie könnten Sie den Anwendungsstatus sonst speichern?
EDIT : Ich würde auch gerne wissen, wie sich dies auf die Testbarkeit auswirkt. Einer der Hauptgründe für die Verwendung von MVVM ist die Möglichkeit, die Modelle ohne eine Host-Anwendung zu testen. Insbesondere bin ich daran interessiert, wie sich zentralisierte Anwendungseinstellungen auf die Testbarkeit und die Möglichkeit, die abhängigen Modelle zu mocken, auswirken.