2010-05-21 19 views
3

Je travaille actuellement sur un projet ASP.NET MVC2. C'est la première fois que je travaille sur une vraie application web MVC. Le ASP.NET MVC website m'a vraiment aidé à démarrer très rapidement, mais j'ai encore quelques connaissances obscures concernant la validation du modèle de données. Mon problème est que je ne sais pas vraiment où gérer mon datamodel rempli quand il s'agit de règles de validation complexes. Par exemple, la validation d'un champ de chaîne avec un Regex est assez facile et je sais que je dois juste décorer mon champ avec un attribut spécifique, donc les règles de gestion de données sont implémentées dans le modèle. Mais si j'ai plusieurs champs dont j'ai besoin de valider les uns avec les autres, par exemple plusieurs datetime qui doivent être correctement définis en fonction d'une règle de temps spécifique, où dois-je les valider? Je sais que je pourrais créer mes propres attributs de validation, mais parfois la validation demande un chemin de validation spécifique qui doit être complexe pour être validé en utilisant des attributs.Où mettre des règles de gestion de données pour la validation de données complexes dans ASP.NET MVC?

Cette première question me conduit également à une question connexe qui est, est-il juste de valider un modèle dans le contrôleur? Parce que pour le moment c'est la seule façon que j'ai trouvée pour la validation complexe. Mais je trouve cela un peu sale et je pense qu'il ne correspond pas vraiment au rôle de contrôleur et qu'il est beaucoup plus difficile à tester (chemin de code multiple).

Merci.

NB:. Je suis arrivé assez bonnes solutions ici, mais je suis en attente d'autres idées et une solution « meilleures pratiques » »

+0

je me pose la même question. En essayant d'être aussi "SEC" que possible, que dois-je faire avec des validations simples (requises, format, etc.)? Devrais-je utiliser DataAnnotation pour l'appliquer dans la vue et refaire les mêmes validations (plus les plus complexes) dans ma couche de gestion? –

Répondre

4

Mega Dupe. Méga subjectif. L'argument "où et comment valider avec MVC" a été battu à mort sans donner de réponse claire. Ceci est tellement subjectif et philosophique pour chaque développeur/boutique qu'il est presque impossible pour tout le monde de se mettre d'accord sur quoi que ce soit.

L'autre problème est que l'outillage de validation est disponible dans un tas de formes et de tailles et peut fonctionner dans différentes étendues et couches. C'est presque fou la variété dans l'outillage de validation. Comment if (someString! = "") Est-il devenu si difficile? ;)

Si vous lisez ces autres réponses, vous trouverez rapidement aucune bonne pratique. Une fois que vous êtes dans les principes de conception guidée par les domaines et que vous discutez de l'état et des objets non valides, la discussion devient encore plus compliquée.

Where do you do your validation? model, controller or view

ASP.NET MVC 2 validation using DTOs instead of domain entities

Does ASP.Net MVC 2 validation need some more thought in terms of patterns and use?

Mapping Validation Attributes From Domain Entity to DTO

Which validation library for ASP.NET MVC?

ASP.NET MVC - User Input and Service/Repository - Where to do Validation?

ASP.NET MVC: Is Data Annotation Validation Enough?

MVC - where to implement form validation (server-side)?

Asp.Net MVC Validation

DDD:

Validation in a Domain Driven Design

+0

Cela semble un peu en colère, mais des liens vers de bonnes informations .... beau travail? – R0MANARMY

+1

@ R0MANARMY Je comprends beaucoup de choses; comment je semble toujours en colère? Je ne suis vraiment pas. :( – jfar

+1

Je plaisantais, ne le prends pas trop personnellement – R0MANARMY

2

Ma personne opinion serait de garder la vue aussi propre que possible et essayer de la force la vue que pour afficher les données (en gardant le point de vue aussi stupide que possible).

Bien sûr, vous pouvez faire une simple validation dans la vue tels que requis, les règles Regex et ainsi de suite.

règles métier complexes devraient s'asseoir à l'intérieur d'une entité commerciale ou d'une couche de logique métier

Ce que je fais dans mes projets MVC est que le modèle appelle une méthode telle que Validate() qui vérifie le niveau final de validation tel que les règles métier et ainsi de suite et que je puisse appeler Save();

+0

Je crois que je pourrais le faire en étendant assez facilement mes classes partielles LinqToSql partielles. Merci. – Ucodia

1

Une fois qu'une classe remplie est prête à être validée, transmettez-la simplement à une classe de validation dans le contrôleur.

+0

J'adore cette idée. Il me rappelle la conception utilisée dans le contrôleur de compte par défaut. – Ucodia