Les pratiques actuelles de MVVM view model enfreignent-elles le principe de Responsabilité Unique?

avec les pratiques actuelles (au moins avec WPF et Silverlight) nous voyons des vues liées par des liaisons de commande dans le modèle de vue ou nous voyons au moins des événements de vue traités dans les modèles de vue. Cela semble être une violation de l' SRP parce que le modèle de vue ne modélise pas seulement l'état de la vue, mais répond à la vue (utilisateur). D'autres ont demandé comment construire des modèles de vue sans violer SRP ou demandé si leurs implémentations le font (ce dernier est le contrôleur dans MVC, mais à peu près analogue).

ainsi, les pratiques actuelles constituent-elles une violation du PRS? Ou "view model" est-il vraiment une collection de choses qui ne violent pas SRP? Pour encadrer un peu cela, il semble que nous ayons besoin de savoir quelle est la responsabilité unique ou s'il y a plusieurs responsabilités dans le concept, les responsabilités individuelles sont-elles divisées, conformément au PRS? Je ne suis pas sûr.

définition de Wikipédia du modèle de vue dit

[T]il ViewModel est un "Modèle de la Vue", c'est à dire une abstraction de la Vue qui sert également de liaison de données entre le Modèle et la Vue

Cela semble assez bon pour la SRP, mais l'entrée dit plus tard (mon emphase ajoutée)

[le modèle de vue] agit comme un liant/convertisseur de données qui change l'information du modèle en information de vue et passe les commandes de la vue dans le modèle

Dans un Prism blog sur le rôle du modèle de vue, l'auteur dit (encore une fois, mon emphase)

Ce qui se résume, c'est que le modèle de vue est un composite de la suite:

  • une abstraction de la vue.
  • commandes
  • convertisseurs de valeur
  • afficher l'état

je suis sûr que j'ai raté beaucoup de définitions, mais ils semblent tomber dans ces catégories:

  1. une seule responsabilité "vague" de la modélisation état de la vue (alors qu'est-ce que nous moyenne par l'état)
  2. responsabilités multiples (état de vue, interaction de l'utilisateur (i.e. les commandes))
  3. un ensemble de responsabilités spécifiques (abstraction, l'état, l'interaction, la conversion), responsabilité:"gérer tout ça".

Si vous êtes curieux, j'ai des "soins" à ce sujet, car (2) se sent le droit, mais cela semble aller à l'encontre des implémentations dominantes.

18
demandé sur Community 2011-08-23 20:35:12

4 réponses

responsabilité unique en tant que Martin le définit:

" IL NE DEVRAIT JAMAIS Y AVOIR PLUS D'UNE RAISON POUR QU'UNE CLASSE CHANGE."

un modèle de vue, en ce qui concerne MVVM est vraiment juste une implémentation spécialisée d'un Modèle De Présentation.

alors que l'on pourrait argumenter qu'un Modèle De Présentation ne doit représenter que le état de L'IU, et qu'un Présentateur/Contrôleur devrait toujours négocier les commandes entre L'UI et le modèle de présentation. Si l'on suit cette idée, avec SRP divisant sur L'état et les commandes, puis ajout d'une commande ne devrait pas affecter la classe qui représente l'état. Par conséquent, MVVM briserait SRP.

cependant...

je pense que c'est s'agripper à des pailles. MVVM est une implémentation assez spécialisée utilisée essentiellement dans WPF / Silverlight (et maintenant navigateur les clients