2010-08-30 5 views
7

Je prévois d'écrire une application WPF suivant le modèle MVVM pour la première fois, mais quelque chose ne me semble pas très clair. Disons que la vue a un bouton "Enregistrer" et quand cela est touché, j'ai besoin de sauvegarder l'état actuel de mes données (le modèle). Cela sera fait en envoyant un message SOAP à un service SOAP. Où se trouvent les gestionnaires de requêtes/réponses SOAP dans ma configuration MVVM? Le modèle de vue fait-il appel SOAP lui-même à chaque fois que le bouton de sauvegarde est touché? Le modèle de vue doit-il notifier le modèle pour qu'il se sauvegarde à la place? Peut-être que c'est un autre moyen, complètement séparé du MVVM? Je pensais que (du moins dans ce cas précis) le modèle de vue le manipulerait puisqu'il doit désactiver le bouton de sauvegarde dans la vue jusqu'à ce que la demande de sauvegarde en cours soit terminée.Couche de service MVVM

+0

J'ai commencé à écrire une réponse, puis j'en ai parlé moi-même, et +1 à la place. Mon instinct est que le Modèle devrait le gérer, puisque la plupart des ViewModels utilisent un DataContext du Modèle, mais cela ne met pas vraiment à jour le Modèle lui-même, mais plutôt quelque chose en dehors de ce Modèle ... –

Répondre

5

Je place généralement une application/couche de gestion côté client logique entre le viewmodel et la couche SOAP/WCF/Webservice. Cette couche est l'endroit où vit toute la logique métier et la logique de traitement sans vue. Rappelez-vous, le viewmodel est le modèle de la vue, pas le modèle du domaine. Par conséquent, vous souhaitez transférer le contrôle à la couche suivante vers le bas dès que possible.

Dans ce scénario, je voudrais que la vue déclenche une commande save sur le viewmodel, qui à son tour appelait dans la couche application, qui à son tour effectuer des appels aux services distants.

4

Le ViewModel ne devrait pas effectuer une telle opération. Cela devrait seulement le déclencher. Par conséquent, le modèle doit le faire (ou un autre calque intermédiaire responsable des opérations de chargement et d'enregistrement, mais pas du ViewModel lui-même).

Le ViewModel peut observer l'opération de sauvegarde et peut fournir des informations d'état sur la progression de la vue.

0

Je créer un gestionnaire de service accessible par ViewModel. Transmettez ceci dans le constructeur du viewmodel, et appelez les méthodes exposées par le gestionnaire de service.

Questions connexes