Chaque fois que je commence à travailler sur une nouvelle application Web ASP.NET MVC, je ne suis pas sûr d'utiliser ou non la validation DataAnnotations
. Quelque chose à ce sujet se sent mal.DataAnnotations ou de valider manuellement dans les services?
Par exemple, supposons que j'ai un UserService
qui est passé un CreateUserModel
de l'action Create
du AccountController
. Pour que l'utilisateur fournisse toujours un nom, définissez la propriété Name
du modèle sur l'attribut [Required]
. Je suis maintenant sûr que le classeur modèle ne me donnera jamais un CreateUserModel
sauf s'il a un nom.
Mon problème est que pour mon UserService
être un composant réutilisable de mon système, il ne peut pas compter sur le fait que la couche ci-dessus fournit des données valides, et sûrement doit également valider ces données. Le besoin de ceci est accentué plus loin quand vous considérez que vous pouvez vouloir écrire un service Web qui réutilise complètement le UserService
(et n'a pas le classeur modèle pour faire toute la validation d'annotation de données pour cela). Donc, ma question est la suivante: Quelle est la meilleure pratique pour cette situation? Valider avec des annotations de données et répéter cette validation dans les services? Valider uniquement dans les services et lancer des exceptions? Un mélange des deux? J'espère que ma question n'est pas trop subjective, j'essaie principalement d'établir un consensus sur si le déplacement de la validation aux annotations de données va finir par me mordre à la fin.
C'est ce que nous faisons, sauf que nous passons un IValidationDictionary à la couche sevice qui est implémentée en tant qu'enveloppeuse ModelState afin que la couche de service puisse ajouter directement des erreurs à ModelState sans dépendre de ASP.NET MVC. Le contrôleur n'a donc pas besoin de gérer l'ajout d'erreurs renvoyées à ModelState. –