Quelle est la différence entre le contrôleur dans MVC et ViewModel dans MVVM?

21

Je ne vois pas clairement la différence entre MVC et MVVM. Je pense que la commande dans un ViewModel est exactement comme la méthode Action dans un contrôleur. Et le contrôleur et le ViewModel aviseront la vue de s'actualiser après avoir modifié l'état du modèle via la liaison de données. Quelle est la principale différence entre les deux modèles?

TomCaps
la source

Réponses:

25

Le contrôleur et le ViewModel diffèrent de différentes manières.

Dans MVC, le contrôleur connaît la vue, il peut changer la vue. Il connaît également le modèle et peut l'appeler. Dans MVVM, un ViewModel est une représentation abstraite de la vue et ne connaît pas l'interface utilisateur concrète, il enveloppe le modèle de manière à ce qu'il puisse être affiché comme vous le souhaitez.

Dans le MVC classique, un contrôleur n'est qu'une stratégie de la vue pour interagir avec le modèle. En fait, parfois, un contrôleur n'est même pas nécessaire. Dans MVVM, vous n'en avez pas besoin, car vous pouvez avoir différents ViewModels pour la même vue si vous avez besoin de comportements différents. Dans MVC, vous pouvez avoir par exemple un ReadOnlyController ou un AdminController pour communiquer avec le modèle. Dans MVVM, vous pouvez simplement avoir deux ViewModels et vous choisissez celui dont vous avez besoin pour la vue.

Mais ils ont quelques similitudes. Dans les deux modèles, la vue est un observateur . Dans MVC classique, la vue est un observateur du modèle, dans MVVM c'est un observateur du ViewModel.

Les deux modèles visent à séparer les préoccupations. MVVM vise principalement à fournir une abstraction de la vue, complètement indépendante de la technologie d'interface utilisateur utilisée. MVC ne va pas aussi loin. Son objectif principal est la séparation des préoccupations, afin de ne pas mettre la logique métier (le modèle) dans la vue.

Vous pourriez également trouver utile ma réponse à une question similaire.

Enfin, je dois dire que les deux modèles appartiennent à la même famille. MVP, dont MVVM est un descendant, est un frère de MVC. Si vous voulez en savoir plus suivez ce lien vers le site de Martin Fowler , il explique tout en détail.

Faucon
la source
ne pensez-vous pas que ces architectures de vue modèle sont mieux comprises par les personnes qui les mettent en œuvre. Je pense que c'est une question de choix pour le développeur. On choisit MVC ou MVVM selon qu'il veut une abstraction totale de la vue avec un peu de frais généraux (dans le cas de MVVM).
Pankaj Upadhyay
@Pankaj Upadhyay: Lequel vous devez utiliser dépend de vos besoins et de votre choix de technologie ainsi que des particularités de votre plate-forme.
Falcon
Je crois que l'architecture MVC est assez bonne pour tout, mais c'est peut-être parce que je n'ai pas rencontré de problème qui nécessitait particulièrement MVVM. OMI, vous devez certainement avoir un certain contrôle sur la vue car la rendre absolument lâche augmentera davantage d'erreurs dans les futures mises à niveau
Pankaj Upadhyay
1
@Pankaj Upadhyay: Si vous souhaitez utiliser la même logique pour diverses technologies d'interface utilisateur, MVP est supérieur. Je ne pense pas que vous ayez nécessairement besoin d'un certain contrôle sur la vue. Il peut être totalement indépendant et vous pouvez également tester les ViewModels - sinon mieux. La meilleure séparation profite également aux concepteurs car le travail sur le projet peut être mieux partitionné.
Falcon