Las mejores prácticas para validar los datos de entrada para la aplicación de varios niveles [cerrado

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

Pregunta

En nuestra aplicación tenemos varias capas. Capa de servicio, capa DAO y acciones (aplicaciones Struts).

Los datos se pasan de una capa a otra.

¿Dónde deberíamos poner idealmente la validación de entrada?

Digamos que el ID de usuario, el número de teléfono proviene de la interfaz de usuario, son obligatorios. Así que ya estamos haciendo validación en el lado del cliente.

Ahora, según mi opinión, todo lo que necesitas. En ningún otro lugar debe validarse.

Pero uno de mis colega argumenta, ¿qué pasa si el cliente solicita directamente la solicitud? Por lo tanto, también necesitamos agregar acciones.

Ahora, en DAO también, el mismo método se está utilizando en alguna otra acción y no tiene validación,

O, digamos la capa de servicio, podría estar expuesto como, por ejemplo, como servicio web, por lo que también hay validación.

Esencialmente, él está sugiriendo ... tenemos validaciones en todas partes. Que no tiene sentido para mí. Su duplicación a través de la capa.

¿Cuál es el enfoque ideal para esto? Digamos que la validación puede ser simple cheque nulo o alguna validación compleja.

¿Fue útil?

Solución

De acuerdo con Pangea, definitivamente debe tener validaciones en los puntos finales del cliente y el servicio.

Agregaría que el concepto de validaciones es ser "Fail-Fast". Agrega validaciones a cada capa para que el usuario o la persona que llame obtenga comentarios inmediatos sobre por qué la llamada fallaría en lugar de comenzar potencialmente una transacción, hacer consultas complejas y escribir solo para descubrir que un campo es demasiado corto.

En el lado del cliente, desea la mayor validación posible para que no pierda el tiempo del usuario, el ancho de banda y los recursos del lado del servidor (que tienen contenciones en muchos casos). Sin embargo, generalmente no puede hacer todas las validaciones en el lado del cliente (por ejemplo, para verificar si ya existe un nombre de usuario en uso en el registro), por lo que desea que ese mensaje de error comprobado y correcto se devuelva tan pronto como usted Golpea la capa de servicio.

En la capa del servidor, desea asumir que todas las entradas son potencialmente peligrosas e incorrectas (y a menudo lo serán). De hecho, creo que es mejor ser más integral y agresivo en la validación de las entradas en la capa de servicio, ya que esa es su última línea de defensa. Si deja de lado una validación o dos en el lado del cliente, solo necesita un buen mecanismo de manejo de fallas para que los usuarios sepan lo que está mal. Si pierde algo en el lado del servicio y los ataques de desastre, podría significar horas o días de depuración e intentar restaurar las copias de seguridad de la base de datos.

También hay algunas comprobaciones que se realizan a nivel de base de datos que hacen cumplir cosas como la integridad referencial y demás. Por lo general, trato de verificarlos antes de intentar una escritura, ya que interpretar los mensajes de error de varios RDBMS y tratar de convertirlos de regreso a la jerga comprensible del usuario a menudo es difícil, si no imposible.

Otros consejos

Si su aplicación proporciona múltiples puntos de entrada (interfaces de usuario o sistema a sistema o sistemas por lotes), entonces debe limpiar (Verificaciones nulas, comprobaciones de formato, requerido, etc.) sus datos en todos estos bordes y antes de que llegue a la capa de servicio. Pero esto no significa que necesite replicar su lógica de validación. Puede usar marcos que le permitan centralizar su validación. Algunos marcos de validación de ejemplo se pueden encontrar en este correo.

Sin embargo, hay validaciones comerciales que deben pertenecer a su capa de dominio y deben permanecer en su capa de servicio de dominio o objetos de dominio.

No estoy de acuerdo en que deba realizar validación en Dao's. Dao's solo debería ser responsable de las operaciones CRUD. Si están haciendo más, entonces tienes capas con fugas. Si tiene que procesar las cosas en lotes, debe asegurarse de que el lote llegue a través de la capa de servicio para que su lote también pase por las mismas validaciones.

La única sabiduría que puedo agregar a la conversación es que nunca confíe en el cliente. Ya sea que su cliente esté en HTML, Flash/Flex, o lo que sea, existe la posibilidad de que alguien lo piratee e intente hacer algo que no quiera que hagan. El seguimiento aquí es que, si existe la posibilidad de que alguien lo piratee, nosotros, como ingenieros de software, debemos asumir que va a ser pirateado, por lo que si bien los controles en la parte delantera son agradables y podemos ayudar a la usabilidad de sus aplicaciones. , debe validar todas sus entradas en el back -end, incluso si eso conduce a verificaciones duplicadas.

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