Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/02/2014, 13:54
RabidFish
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 15 años, 9 meses
Puntos: 26
Validación de formularios en MVC

Hola a todos, ¿qué tal?

Creo este tema para debatir sobre la validación de formularios (datos enviados por POST) en una aplicación basada en el patrón de arquitectura MVC. Lo que me interesa es encontrar, a partir del aporte de Uds., una buena forma de implementar las validaciones en mis proyectos (cómo hacerlo, dónde hacerlo, etc.).

Personalmente, estoy en el proceso de aprender sobre el patrón MVC (por lo tanto, pido disculpas por cualquier mala interpretación de conceptos que haga) y sólo tengo experiencia utilizando CodeIgniter. Si bien ha sido un avance desde mi forma anterior de programar y diseñar software web, hay algunas cosas que no me convencen.

En CodeIgniter, contamos con la librería Form_validation que pemite realizar ciertas validaciones genéricas (que un campo sea numérico, que contenga un e-mail válido, etc.). Esta validación se realiza en el controlador, y cuando todo es correcto, se puede proceder a instanciar objetos (cuyo estado se presupone válido gracias a Form_validation) del modelo para almacenarlos en la base de datos.

Hasta ahí todo bien, pero, ¿qué pasa cuando uno quiere validar algo más específico propio del dominio del problema? En este caso, CodeIgniter permite crear métodos privados dentro del mismo controlador donde se está realizando la validación, y esto es lo que no me gusta. Por ejemplo, si yo estoy procesando el login de un usuario y quiero verificar que no esté dentro de la lista de usuarios bloqueados para impedirle o no el ingreso, debería crear un método "_noEstaBloqueado()" dentro del controlador Usuarios para que le pregunte a la clase Usuario del modelo si la cuenta fue bloqueada, y luego "le responda" a la librería de validaciones. En realidad, según tengo entendido, todo esto debería realizarse en el modelo sin necesidad de crear ese método en el controlador, y el controlador debería limitarse a acciones más básicas.

Otro problema con el que suelo encontrarme al trabajar de esta forma es que a veces termino realizando muchas consultas innecesarias a la base de datos. Es decir, si en el campo del formulario recibo el nombre del usuario, en cada método privado que yo agregue para validaciones específicas (que son independientes entre sí) primero tengo que buscar cuál es el ID del usuario, dato indispensable para muchas validaciones.

Finalmente, me he encontrado en situaciones donde necesitaba más de dos valores o parámetros para realizar una validación, pero CodeIgniter sólo permite dos (el valor del campo a validar y un parámetro opcional). En estos casos, me vi obligado a enviar los parámetros de forma una engorrosa. El hecho de que este framework almacene todas las funciones de validación en un único string lo considero un problema potencial.

En fin, sería bueno que aquellos que hayan probado otros frameworks o hayan desarrollado sus propias "estructuras de trabajo" mencionen alternativas que resuelvan los inconvenientes que mencioné.

Un saludo.