MVC ¿quién verifica?
4 seguidores
En un patrón MVC tengo como parte de la vista un campo de texto para escribir y un boton para guardar ese texto en un modelo de datos.
Si el campo de texto esta en blanco no quiero que se guarde nada.
¿Donde pongo ese "IF" en el modelo, en la vista o en el controlador?
Se me ocurren tres opciones:
1 El modelo. Verifica y mediante un evento de error informa a la vista que no se puede guardar un texto en blanco.
2. El controlador verifica y no permite mandar el texto en blanco al modelo.
3. Directamente la vista desactiva el botón de guardar hasta que no escriban algo en el campo te texto.
juandelgado
Personalmente diría que en el modelo, habilitando un método público, tal que así en pseudo-código:
Modelo:
public function validateData():Boolean
Vista o Controlador:
if(model.validateData()){} else {}
Ahora, si lo piensas, muchas aplicaciones web hacen validación en la vista vía JS, lo cual nos puede parecer mejor o peor. En el caso de desarrollo web da igual lo que valides en el cliente porque luego tienes que validar en servidor. Yo me preguntaba por esto hace tiempo: Validación cliente, no lo veo claro.
Buscando un poco en Google he encontrado Where to put validation in the MVC pattern.
Salud!
Kr0n
En teoría el MVC encapsula en la capa del Modelo la lógica de negocio, así que cualquier validación se debería hacer ahí. Ahora bien, eso es en teoría, en la práctica los patrones de diseño no suelen aplicarse a rajatabla, muchas veces por cuestiones de rendimiendo, usabilidad etc.
Eso es por lo que muchas comprobaciones triviales, como las de campo vacio, mail valido, etc., se hacen en las vistas o en los controladores, mucho más cerca del usuario, para mejorar el feedback a este.
orange
La validación en cliente se pone para facilitarle la vida al usuario, sin tenerle que obligar a recargar la página por determinados errores.
Y la validación en el modelo se pone para garabtizar la integridad de los datos y la seguridad de la aplicación.
Ambas cosas son importantes, y tienen objetivos distintos. Evidentemente, si sólo se implementa una, que sea la del servidor.
PD: Veo que Sunzú en tu blog te hizo ya este comentario ;)
Usuario desconocido
Encontré un gran artículo sobre poo y mvc, muy recomendable porque esta actualizado a AS3 y tiene pequeñas animaciones interactivas:
http://moock.org/lectures/groundUpAS3/
No obstante me surge otra duda. Si tenemos que tener un controlador por cada una de las vistas. ¿Quien controla a todas las vistas?
¿Que pasa cuando una vista quiere ocultar a otras vistas?
¿Todas las vistas se deben conocer entre si?
¿Debemos tener un controlador de la aplicación que se encargue de gestionar a todos los controladores y a todas las vistas?
¿Existe otro patrón que se use en lugar de MVC?