2009-08-10 31 views
24

Où la validation doit-elle résider lors de l'utilisation de ViewModels avec MVC (MVVM), sur le modèle ou ViewModel? (Ou les deux ou ni l'un ni l'autre)? Et pourquoi? J'aborde cela surtout à la lumière de la V2 d'ASP.NET MVC qui sortira bientôt.Validation: Modèle ou ViewModel

Qu'en est-il de la validation complexe/personnalisée?

+2

Marque mvvm? Le viewmodel de MVC ne sont pas les viewmodels du pattern MVVM. –

+0

MVVM est largement basé sur le modèle MVC, mais j'apprécierais que vous expliquiez votre commentaire (avec quelques liens, peut-être). –

Répondre

19

Toute validation spécifique à l'entreprise doit figurer dans le modèle. Toute validation spécifique à un site Web peut être effectuée à la fois dans le Modèle et/ou ViewModel. De cette façon, votre logique métier (Modèles) peut se déplacer derrière une interface différente (Windows, Web Forms, etc.) et votre validation restera intacte.

5

Modèle. Votre validation devrait être dans votre couche de gestion. Votre modèle de vue devrait être juste pour obtenir votre configuration d'affichage.

11

Je dirais qu'il est souvent nécessaire de valider à tous les niveaux :)

je pensais pendant un certain temps au sujet suivant:

  1. validation des entrées utilisateur: sans aucun doute sur le contrôleur, pas sur tout type du modèle. Exemple: Captcha.
  2. Afficher les données associées validées sur le ViewModel (pas dans le ViewModel, mais sur le ViewModel). Exemples: Confirmation de mot de passe, E-mail requis.
  3. La validation des règles métier passe définitivement à la validation du modèle. Exemples: E-mail requis, Le coupon de réduction doit être valide.
  4. Validation potentielle d'utilisation (scénario, scénario, etc.). Il ne valide pas les attributs, mais valide l'exactitude de l'ensemble du processus. Devrait aller à la validation du modèle (ou mieux dans une couche distincte). Exemple: Seulement 3 articles peuvent être obtenus gratuitement pendant une semaine si aucune commande n'a été mis pour la période donnée.

NOTE: J'inclus le requis Courriel à la fois 2 et 3 comme cela dépend souvent là où il appartient.
Si le courrier électronique joue uniquement un rôle informatif, la validation peut être relâchée et la pousser vers le modèle de vue. Si l'email est une exigence forte pour l'application - c'est définitivement la validation du modèle.

La 4ème chose n'a en fait rien à voir avec la validation telle que nous la comprenons.
Mais il devrait également être appliqué. Ainsi, son résultat devrait être affiché à l'utilisateur.

Fondamentalement, tous les 4 types de validation peuvent utiliser la même infrastructure. Mais la mise en œuvre dépend:) ...

Cheers,
Dmitriy.