2010-06-10 15 views
9

J'utilise ASP.NET MVC avec les classes Entity Framework POCO et le framework FluentValidation. Cela fonctionne bien et la validation se passe comme prévu (comme si j'utilisais DataAnnotations). J'ai même réussi à faire fonctionner la validation côté client. Et j'en suis plutôt content. Puisqu'il s'agit d'une application de test que j'écris juste pour voir si je peux faire fonctionner les nouvelles technologies (et les apprendre en cours de route), je suis maintenant prêt à expérimenter avec ViewModels au lieu de simplement passer le modèle réel à la vue. Je prévois d'utiliser quelque chose comme AutoMapper dans mon service pour faire le mappage de Model à ViewModel, mais j'ai d'abord une question.Utilisation de ViewModel dans ASP.NET MVC avec FluentValidation

Comment cela va-t-il affecter ma validation? Mes classes de validation (écrites à l'aide de FluentValidation) doivent-elles être écrites par rapport au ViewModel au lieu du modèle? Ou doit-il se produire aux deux endroits? L'un des gros avantages de DataAnnotations (et de FluentValidation) était que vous pouviez avoir une validation à un endroit qui fonctionnerait "partout". Et cela remplit cette promesse (la plupart du temps), mais si je commence à utiliser ViewModels, est-ce que je ne perds pas cette capacité et je dois revenir à la validation à deux endroits?

Ou est-ce que je n'y pense pas?

Répondre

4

Ou est-ce que je n'y pense pas?

probablement;)

Si vous ajoutez tout le code de validation à votre ViewModels vous voulez juste être au lieu de les valider vos modèles réels. Tout ce que vous changez vraiment, c'est quels objets peuvent entrer dans un état invalide.

À l'heure actuelle, je suis heureux comme taré validant seulement ViewModels, puis en transmettant cette information aux modèles réels et DAO couches. Si votre domaine peut entrer dans un état invalide est un sujet controversé, mais jusqu'à présent, cette technique fonctionne très bien pour moi. Validation en un seul endroit et aucun objet invalide dans mon magasin de persistance.