Je lisais Pro ASP.NET MVC Framework, Steven Sanderson, et au chapitre 11, il traite de la validation des données.Validation des règles sur la couche de données ou de domaine?
À la page 390, nous voyons la section Déplacement de validation de logique dans votre modèle couche. Dans cette section, nous voyons, à la page 392, du code montrant comment implémenter la validation.
Le code implémente une méthode GetRuleViolations()
et la méthode Save()
l'utilise pour lancer un RuleException
si quelque chose n'allait pas.
Il semble à moi, cependant, qu'il n'y a pas de distinction entre la couche de domaine et un accès aux données couche, voici le code:
public void Save() {
var errors = GetRuleViolations();
if (errors.Count > 0)
throw new RuleException(errors);
// Todo: Now actually save to the database or whatever
}
private NameValueCollection GetRuleViolations() {
// validations...
}
Dans un projet, je travaille, j'ai Couche de domaine, aussi ignorante que possible pour la persistance, et couche d'accès aux données, implémentant l'accès aux données via NHibernate et implémentant les référentiels dont les interfaces ont été définies dans la couche Domaine. Si j'implémente les règles de validation que l'auteur propose ici, sur la méthode "Save()
", elles iraient sur ma couche d'accès aux données, même si, du moins je pense, elles devraient résider sur le modèle de domaine!
Alors, ma question est: lors de la création d'une l'application en couches, avec une couche de domaine mise en œuvre des entités de domaine et d'exposer les interfaces aux référentiels (persistance ignorants), une données couche d'accès aux mise en œuvre des référentiels de la couche de domaine et l'implémentation de tout le code d'accès aux données, où les règles de validation doivent-elles se trouver?
Mon interface primaire (ou au moins première) sera une application ASP.NET MVC, si cela peut changer quelque chose.
Merci.
En fait, j'ai deux idées divergentes qui me trottent dans la tête: (1) si je décide d'écrire une nouvelle LDA, je ne voudrais pas réécrire toutes les mêmes règles (DRY) - pour éviter de manquer une règle une erreur ou devoir ré-implémenter toutes les nouvelles règles plusieurs fois; et (2) il serait difficile d'implémenter une «validation contextuelle» sur le domaine (puisque je devrais injecter des détails sur le contexte du domaine chaque fois que je le traite) ... –