Je demande cela parce que après une longue période de recherche que je ne l'ai pas trouvé une bonne réponse sur ce encore ...ASP.NET validation complexe dans la couche d'affaires/services
Voici ce que je veux:
Exemple: J'ai un modèle de domaine "JobPosting" qu'un utilisateur devrait pouvoir changer d'état à publié, s'il s'agit toujours d'un brouillon. Avant de publier, je dois non seulement valider les propriétés du modèle, mais également valider de nombreuses exigences différentes concernant le compte d'utilisateur, sa société enregistrée, etc. Toute cette logique de validation est placée dans une couche de service. Jusqu'à présent, si bon ...
Voici comment ma couche de service ressemble à:
public IValidationResult ValidatePublish(JobPosting jobPosting){
...
}
public void Publish(JobPosting jobPosting){
jobPosting.State = JobPostingState.Published;
...
}
Tout mon contrôleur:
public ActionResult Publish(PublishViewModel model){
...
var validationResult = _jobService.ValidatePublish(jobPosting);
if(validationResult.Success){
_jobService.Publish(jobPosting);
...
}
...
}
Et voici maintenant mes questions:
Je veux pour pouvoir appeler le ValidatePublish à partir du contrôleur pour afficher les erreurs de validation dans la vue. Cependant, je ne dois jamais être capable de publier un travail lorsque la validation échoue. Donc, pour avoir mon code plus robuste j'ai ajouté une deuxième vérification de validation dans mon Publier méthode dans la couche de service:
public void Publish(JobPosting jobPosting){
if(ValidatePublish(jobPosting).Success){
jobPosting.State = JobPostingState.Published;
...
}
}
mais je n'ai pas un bon feeling avec cette approche parce que maintenant je fais appel à la validation à deux reprises lors de la validation est OK lors de chaque demande de publication de contrôleur.
Que pensez-vous. Est-ce que le deuxième appel à beaucoup? Est-ce qu'il y a une meilleure approche? Je demande parce que mon application entière ressemble à cela et si jamais j'oublierais un appel de validation dans le contrôleur je pourrais finir avec un état de modèle de domaine non autorisé dans la base de données. C'est pourquoi j'ai ajouté la deuxième vérification de validation dans chaque méthode de service.
Merci d'avance pour vos commentaires à ce sujet !!!
"J'appelle la validation deux fois" où appelez-vous la validation une deuxième fois? –
Premier appel dans le contrôleur: var validationResult = _jobService.ValidatePublish (jobPosting); Deuxième fois dans la méthode de service Publier: if (ValidatePublish (jobPosting) .Success) { – Simon
alors pourquoi validez-vous à nouveau dans la méthode? Vous pouvez simplement publier directement. –