Con una aplicación MVC debe mi validación de reglas de negocio se replicará en el modelo de vista y / o controlador?

StackOverflow https://stackoverflow.com/questions/4375729

Pregunta

Mi aplicación MVC tiene un dominio bien definido Modelo con cada Modelo de realizar sus propios controles de reglas de negocio.

Mi pregunta se debe replicar las reglas de negocio en el modelo vista controlador o demasiado o debería simplemente permitir que el modelo para generar los errores de validación?

Vamos a suponer que la validación que estamos hablando no se puede hacer del lado del cliente y es más complicada que la validación de campo simple que se puede hacer mediante la adición de validación de atributos de las propiedades de vista del modelo.

El problema con que se permita el modelo de manejar todos la validación es que los mensajes de error que genera pueden no ser adecuado para la visión particular que su acoplado a, nombres de campo no sea correcta, por ejemplo. También tengo que añadir el error a la ModelState utilizando el nombre de la propiedad vista del modelo no es el nombre de la propiedad del modelo de dominio.

El problema con la adición de la misma validación de reglas de negocio para el modelo de vista / controlador es la cuestión obvia de mantenimiento duplicación y que significa la validación en mi modelo de dominio en realidad nunca debe producir ningún error que tipo de hace que sea un poco sin sentido.

¿Cómo se manejan generalmente esto?

¿Fue útil?

Solución

La solución que utiliza normalmente para su uso en este escenario es tener la validación en el modelo (o en mi caso por lo general una biblioteca de validación) además de añadir el error en el controlador que le permite atrapar el error de validación estándar de la siguiente manera:

public ActionResult Submit(String email)
{
      string errorMessage = "";

      if(Validation.IsValidEmail(email, out errorMessage))
      {
         ViewData.AddModelError("EmailAddress", "My Custom Error Message");

         //or

         ViewData.AddModelError("EmailAddress", errorMessage);
      }
}

Esto no puede ser exactamente lo que está buscando, pero que podría ayudar a subir con una manera de maximizar el código re-utilizable, mientras que siguen siendo capaces de personalizarlo.

Yo solía hacerlo de esta manera - pero poco la bala y mis aplicaciones de uso más reciente mensajes de error estándar en todas partes - mi motivación para esto es que los usuarios son cada vez más cómodo con no son necesarios en corto simples mensajes de validación de campo y nombres el mensaje si el mensaje se muestra en línea con el campo de formulario en lugar de como un resumen. Esto también me permite poner todas mis reglas / mensajes en las anotaciones de datos y me parece que funciona un convite.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top