2011-12-21 3 views
0

J'avais regardé la vidéo de Jose Smith et lu un tutoriel sur MVVM, mais je ne comprends pas comment MVVM est un couplage lâche, c'est-à-dire View et ViewModel. (encore nouveau pour MVVM, seulement essayé de construire le projet de couples avec lui.)Comment le couplage lâche MVVM se compare-t-il à MVP?

Dans MVP, tous les View, Model, Presenter ont une interface, donc ils peuvent être remplacés ou simulés pour les tests unitaires.

Mais dans MVVM, je ne vois pas de personnes utilisant l'interface sur View ou ViewModel. D'après ce que je comprends, le ViewModel extrait les données de Model et les expose en tant que propriétés à la vue et possède la logique métier et la manipulation des données avec le modèle. Par exemple, si je dispose de ViewModel avec la méthode .SaveData() et de certaines propriétés utilisées par la vue, comment les remplacer par d'autres ViewModel s'ils n'ont pas d'interface? Est-ce que quelqu'un peut m'expliquer comment est MVVM lâche couplage?

Répondre

1

MVVM est également supposé être implémenté en termes d'interfaces. Si vous avez une classe MyViewModel alors il implémenterait également IMyViewModel afin qu'il puisse être raillé pour le test. La même chose vaut pour la vue. Donc, dans ce sens précis, MVVM n'est pas différent de MVP. À part cela, la définition de «couplage lâche» est, bien ... lâche, de sorte que vous deviez être plus précis s'il y a d'autres choses sur lesquelles vous voulez des éclaircissements.

Remarque: dans MVVM, il serait idiomatique d'avoir une propriété SaveDataCommand au lieu d'une méthode nue SaveData (bien que la commande soit bien sûr implémentée comme méthode).

+0

Je vois, mais est-il possible d'ajouter la vue dans la page comme type d'interface dans xaml? Ou la plupart des gens ajouteront simplement View et ViewModel par programme? Comme ajouter la vue et un lien vers le ViewModel dans le constructeur. (J'espère que vous comprenez ce que je veux dire) –

+0

@KingChan: Oui, ce sera principalement fait par programmation (et les dépendances seraient injectées dans chaque objet via un conteneur DI). – Jon

+0

Merci maintenant tout le sens! :) –

Questions connexes