Question

Je travaille sur une application WPF, et je structurer à l'aide du modèle MVVM. Dans un premier temps j'ai eu une idée que les ViewModels devraient être réutilisables, mais maintenant je ne suis pas trop sûr plus.

  • Dois-je être en mesure de réutiliser mes ViewModels si je besoin d'une fonctionnalité similaire pour une application WinForms?
  • Silverlight ne supporte pas toutes les choses WPF ne - devrais-je être en mesure de réutiliser pour les applications Silverlight?
  • Que faire si je veux faire une interface graphique Linux pour mon application. Puis-je besoin ViewModel de construire en Mono - Est-ce quelque chose que je devrait essayer d'obtenir?
  • Et ainsi de suite ..

; doit-on écrire des classes ViewModel avec une vue spécifique à l'esprit, ou penser à réutilisabilité?

Était-ce utile?

La solution

Pour répondre à votre question, pensez à responsabilité unique Principe:

  

"Une classe doit avoir un, et seulement   une, raison de changer. "

Je dirais que, dans la raison, vous ne voulez généralement pas réutiliser un ViewModel pour plusieurs points de vue. La principale raison pour laquelle je dirais pour cela, parce que cela donnerait votre ViewModel plus d'une raison de changer. En d'autres termes, il avait besoin de changer si l'une ou l'autre vue des changements, et à mon avis, qui est deux raisons de changer. Où est-il arrêter? Je le garde simple dans ce cas, et lie un ViewModel à la vue.

Une autre chose à penser avec MVVM avec WPF est des modèles de données. Il est beaucoup plus facile à réaliser si chaque ViewModel répond à une et une seule vue.

Autres conseils

Juste en général, appliquer la principl YAGNI - vous n'allez probablement avoir besoin. À moins que vous pouvez voir ces choses comme potentiellement se passe, je garde à l'approche la plus simple pour obtenir votre logiciel de travail pour les besoins que vous avez actuellement.

Dans mon esprit, l'objectif principal de MVVM est d'éliminer le code qui ne peut pas être facilement testée par des tests unitaires . Depuis un modèle de vue peut être testé unitairement mais une vue ne peut pas, ceci est réalisé en faisant le point de vue aussi stupide que possible. Dans l'idéal, comme on peut le faire avec XAML, la vue est complètement déclaratives et seules les données sur un-bind modèle de vue. D'où le "pas de code derrière" mantra.

La réutilisation du modèle de vue sur les différentes technologies de l'interface utilisateur est pas vraiment un objectif de MVVM. Si vous l'essayez, vous serez probablement tenté de déplacer le code spécifique à la technologie de l'interface utilisateur à la vue de nouveau pour maintenir le modèle réutilisable de vue. Cela irait à l'encontre de l'objectif principal de testabilité.

Si vous trouvez vraiment vous avoir besoin de prendre en charge différentes technologies de l'interface utilisateur, alors vous pourriez toujours tenir la logique commune des modèles de vue dans une couche « présentation » partagée. Je ne ferais pas ça jusqu'à ce que qu'il faut bien.

Ceci est une vieille question, donc je hésite à ajouter une autre réponse. Mais toutes les réponses affichées jusqu'à présent ont manqué le point. La réponse de MSDN est très clair : Le ViewModel est très spécifiquement destiné à être partagé par de nombreuses vues sur divers systèmes d'exploitation, comme le montre cette figure:

Agir autrement conduirait inévitablement à un code redondant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top