J'expérimente MVVM pour la première fois et j'aime vraiment la séparation des responsabilités. Bien sûr, tout modèle de conception ne résout que de nombreux problèmes - pas tous. J'essaie donc de savoir où stocker l'état de l'application et où stocker les commandes de l'application.Où stocker les paramètres/l'état de l'application dans une application MVVM
Disons que mon application se connecte à une URL spécifique. J'ai un ConnectionWindow et un ConnectionViewModel qui supportent rassembler ces informations de l'utilisateur et invoquant des commandes pour se relier à l'adresse. Au prochain démarrage de l'application, je souhaite me reconnecter à cette même adresse sans que l'utilisateur ne soit invité. Ma solution jusqu'ici est de créer un ApplicationViewModel qui fournit une commande pour se connecter à une adresse spécifique et enregistrer cette adresse dans un stockage persistant (où il est réellement enregistré n'est pas pertinent pour cette question). Voici un modèle de classe abrégé.
Le modèle de vue de l'application:
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;
}
...
}
Le modèle de vue de la connexion:
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; }
...
}
La question est la suivante: Est-ce un ApplicationViewModel la bonne façon de gérer cette situation? Sinon, comment pouvez-vous stocker l'état de l'application?
EDIT: Je voudrais savoir aussi comment cela affecte la testabilité. L'une des raisons principales de l'utilisation de MVVM est la possibilité de tester les modèles sans application hôte. Plus précisément, je m'intéresse à la compréhension de la façon dont les paramètres d'application centralisés affectent la testabilité et la capacité à simuler les modèles dépendants.
En fait, j'ai utilisé le code Onyx ces derniers jours pour avoir un aperçu de WPF. C'est clairement défini comment je pense et j'ai beaucoup appris. –
Merci. Même si vous n'utilisez pas Onyx lui-même, j'espère que les idées sont utiles. Onyx n'est certainement pas nécessaire ici, bien que la solution d'interface de service que je pense est vraiment ce que vous cherchez. – wekempf