7
votes

Dans quelle mesure les cours de vieillissement doivent-ils être réutilisables?

Je travaille sur une application WPF et je le structure à l'aide du motif MVVM. Au départ, j'ai eu une idée que les mots de vie devraient être réutilisables, mais maintenant, je ne suis plus sûr plus sûr.

  • Devrais-je être capable de réutiliser mes menuisiers si j'ai besoin de fonctionnalités similaires pour une application WinForms?
  • Silverlight ne prend pas en charge toutes les choses WPF. Devrais-je pouvoir réutiliser des applications Silverlight?
  • Et si je veux faire une interface graphique Linux pour ma demande. Ensuite, j'ai besoin que le point de vue construire à Mono - est-ce quelque chose que je devrais s'efforcer?
  • et ainsi de suite ..

    donc; Devrait-on écrire des cours de viewmodel avec une vue spécifique à l'esprit ou penser à la réutilisabilité?


1 commentaires

Ceci est une ancienne question, mais La réponse de MSDN est très clair (et contrairement à toutes les réponses affichées ci-dessous): la viewModel est très spécifiquement destinée à être partagée par de nombreuses vues sur diverses OSS. Faire autrement entraînerait inévitablement du code redondant.


4 Réponses :


14
votes

Pour répondre à votre question, pensez au principe de responsabilité unique:

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

Je dirais, dans la raison, vous ne voulez généralement pas réutiliser une vue de vue pour plusieurs vues. La raison principale que je discuterais pour cela, c'est parce que cela donnerait à votre viewmodel plus d'une raison de changer. En d'autres termes, il devrai changer si l'une ou l'autre vue change, et à mon avis, c'est deux raisons de changer. Où arrête-t-il? Je garderais plus simple dans ce cas et lierais une vue ciblée à la vue.

Une autre chose à penser avec MVVM avec WPF est la template de données. Il est beaucoup plus facile d'accomplir si chaque viewModel s'adresse à une seule vue unique.


0 commentaires

3
votes

Juste en général, appliquez le principal de Yagni - vous n'allez probablement pas en avoir besoin. À moins que vous ne puissiez pas voir ces choses comme potentiellement, je conserverais avec l'approche la plus simple pour que votre logiciel fonctionne pour les exigences que vous avez actuellement.


0 commentaires

3
votes

Dans mon esprit, L'objectif principal de MVVM est d'éliminer le code qui ne peut pas être facilement testé par des tests d'unité . Étant donné qu'un modèle d'affichage peut être testé unitaire mais une vue ne peut pas, cela est réalisé en faisant la vue aussi muette que possible. Idéalement, comme cela peut être fait avec XAML, la vue est complètement déclarative et uniquement des données de données sur un modèle de vue. D'où le "pas de code derrière" Mantra.

La ré-utilisabilité du modèle de vue sur différentes technologies d'interface utilisateur n'est pas vraiment un objectif de MVVM. Si vous essayez de l'essayer, vous serez probablement tenté de déplacer le code spécifique à la technologie UI à la vue pour garder le modèle de vue réutilisable. Cela irait à l'encontre de l'objectif principal de la qualification.

Si vous vous trouvez vraiment besoin de prendre en charge différentes technologies d'interface utilisateur, vous pouvez toujours prendre en compte la logique commune des modèles d'affichage dans une couche de présentation partagée. Je ne ferais pas ça jusqu'à ce que cela soit nécessaire.


0 commentaires

2
votes

C'est une ancienne question, alors j'hésite à ajouter une autre réponse. Mais toutes les réponses postées jusqu'à présent ont manqué le point. La réponse de MSDN est très claire : Le point de vue est très spécifiquement destiné à être partagé par de nombreuses vues sur diverses OSS, comme illustré dans cette figure:

 Entrez la description de l'image ici

Faire autrement entraînerait inévitablement du code redondant.


0 commentaires