He estado leyendo Pro ASP.NET MVC Framework, Steven Sanderson, y en el capítulo 11 se analiza la validación de datos.¿Validación de reglas en la capa de datos o dominio?
En la página 390 vemos la sección Moviendo la lógica de validación a la capa de modelo. En esta sección, vemos, en la página 392, algunos códigos que muestran cómo implementar la validación.
El código implementa un método GetRuleViolations()
y el método Save()
lo usa para lanzar un RuleException
si algo no estaba bien.
Me parece, sin embargo, que hay hay distinción entre la capa de dominio y una capa de acceso a datos, aquí está el código:
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...
}
En un proyecto que estoy trabajando, tengo un Capa de dominio, tan persistente-ignorante como sea posible, y una Capa de acceso a datos, implementando el acceso a datos a través de NHibernate, e implementando los repositorios cuyas interfaces se definieron en la capa de dominio.
Si implemento las reglas de validación como el autor propone aquí, en el método "Save()
", irían a mi capa de acceso a datos, aunque, al menos creo que deberían residir en el modelo de dominio.
lo tanto, mi pregunta es: al crear un aplicación en capas, con una capa dominio la implementación de las entidades del dominio y la exposición de las interfaces a los repositorios (persistencia ignorantes), una capa de acceso a datos la aplicación de los repositorios de la capa de dominio e implementando todo el código de acceso a datos, donde deberían residir las reglas de validación?
Mi interfaz principal (o al menos primera) será una aplicación ASP.NET MVC, si eso pudiera cambiar algo.
Gracias.
En realidad, tengo dos ideas divergentes luchando dentro de mi mente: (1) si decido escribir una nueva DAL, no me gustaría volver a escribir las mismas reglas (DRY) - para evitar perder una regla, o crear un error, o tener que volver a implementar todas las nuevas reglas varias veces; y (2) sería difícil implementar la "validación contextual" en el Dominio (ya que tendría que inyectar detalles sobre el contexto en el dominio cada vez que lo tratara) ... –