Pregunta

En el modelo Modelo-Vista-Presentador, donde debemos escribir las validaciones de la entrada del usuario.

¿Fue útil?

Solución

Las reglas / validaciones específicas del dominio deben estar en el Modelo. Puede tener un model.validate () para informarle si no se violan las reglas. Mire las clases del modelo Rails (ActiveRecord) para una buena implementación de este concepto.

La vista debería dificultar al usuario la introducción de una entrada no válida. Por lo tanto, la clase de errores de entrada 'ingresando una cadena para un valor numérico' debe ser comprimida antes de llegar al presentador. Puede haber alguna duplicación de validaciones entre el modelo y la vista. P.ej. AtributoX debe oscilar entre 1-100. Esto se debe validar en el modelo. Al mismo tiempo, es posible que desee ubicar una rueda giratoria en la interfaz de usuario con el rango minValue y maxValue establecido en 1-100.

Otros consejos

Generalmente mantengo mi vista completamente limpia, no hay lógica allí. Pero no hago mucho desarrollo web. En situaciones de Ajax-ish es posible que desee tener una validación del lado del cliente que tenga que ir en la vista.

La validación de la lógica de negocios va en el modelo. Con la validación de la lógica de negocios me refiero a cosas como verificar el tamaño mínimo del pedido, etc.

La validación de entrada va en el presentador. Esto puede ser como verificar si un campo numérico no contiene caracteres no numéricos. Pero dependiendo de su situación, esto también puede significar verificar si existen archivos, etc.

En casos más complejos donde la validación debe ser reutilizable en diferentes lugares, generalmente la separo en un motor de validación que se puede llamar en diferentes lugares. Esto resuelve algunos problemas con la duplicación del código de validación que se usa en la capa de presentación, así como la capa de persistencia, por ejemplo.

Presentador ....

La vista debería tener " widgets " que impidan la entrada no válida cuando sea posible.

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