Pregunta

Me siento un poco en conflicto en este momento. Tengo una aplicación web utilizando las rayas por un framework MVC y primavera / Hibernate para el back-end. Tengo un método de registro de la cuenta en mi capa MVC que requiere la siguiente validación:

  • nombre de usuario no está ya tomada
  • La dirección de correo electrónico proporcionada no está asociada a ninguna otra cuenta

Tengo un método de validación de rayas (capa MVC) que comprueba estos dos casos, pero se preguntaba si mi capa de servicio debe duplicar estos controles? Si la interfaz de capa de servicio se expone como un servicio web, entonces creo que la validación sería una idea buena, pero si sólo se usa en el contexto de una aplicación web es lo necesario?

Editar:. No estoy con la intención de duplicar el código de validación - me refiero a duplicar el método de validación llamadas en dos lugares

Veo mis opciones como:

  1. Duplicar las llamadas de validación, tanto en MVC y capa de servicio
  2. sólo se debe realizar esta validación en la capa MVC
  3. Sólo se debe realizar esta validación en la capa de servicio.

¿Cuál es la mejor práctica aquí? Estoy en busca de consejo / opiniones de la opción que yo debería ir con y por qué.

Tenga en cuenta que no son simples comprobaciones de validación en los campos de entrada del formulario de inscripción (como la comprobación de los espacios en blanco) y que creo que estos deben ser manejados sólo por la validación MVC; Sólo estoy preocupado por las validaciones más complejas.

¿Fue útil?

Solución

Annie,

Buena pregunta, me he preguntado lo mismo en muchas ocasiones. Esto es lo que terminó con (hasta ahora).

El más puro (pero tedioso) enfoque es para invocar la lógica de validación en ambas capas. el enfoque pragmático podría ser la única invocación en la web de la tierra (por ejemplo, los controladores).

Creo que no hay una respuesta que termina toda discusión. Creo que depende del contexto de su proyecto. Si el tamaño del proyecto es modesto (en términos de personas y el tamaño de la base de código) y se tiene la certeza de que no toda una gran cantidad de código será desarrollado por otros que invocan tu API del servicio (hasta el punto de que no será capaz de supervisar ), a continuación, haciendo la validación en la web de capa única puede muy bien suficiente.

Sin embargo, si espera que muchos clientes es posible que tenga un título de nivel superior. Cuando digo que la seguridad aquí, me refiero a él como el nivel de consistencia-garantiza que usted necesita. Si ese nivel es alto, no hay manera de evitarlo: usted tendrá que hacerlo tanto en el servicio (por seguridad) y la capa de tela (en su mayoría a ser capaces de proporcionar a los usuarios finales una experiencia aceptable)

Así que el factor clave aquí es la seguridad y cuánto de lo que realmente necesita. Si necesita mucho, vas para el enfoque 'purista'. Si su aplicación no exactamente tomar decisiones que se refieren a cuestiones de la vida y la muerte, que van para el enfoque pragmático.

Otros consejos

Código no duplicado. Uso JSR303 Bean Validation para que pueda utilizar la misma lógica de validación en todas las capas de su aplicación.

Hibernate Validator (un proyecto separado de la materia Hibernate ORM) proporciona la referencia de implementación de esta interfaz. Es absolutamente simple de usar, se puede Comienza a ella muy rápidamente .

En mi opinión se debe diferenciate dos tipos de validaciones:

  • La validación de datos de formato: ¿Cuál debe ser validado en la capa de presentación (MVC en su caso). Normalmente, tanto en el cliente y el servidor
  • La validación de los datos de Bussines: ¿Cuál debe ser validado en la capa de servicio

En el caso de que sus validaciones están relacionadas con las reglas de negocio, así que voy a ponerlas sólo en la capa de servicio. Además, si se duplica sus validaciones en ambas capas se van a realizar las mismas consultas dos veces, ralentizar el rendimiento de su aplicación.

  1. Lo ideal es hacer la validación en ambas capas, ya que su capa de servicio se puede utilizar con un cliente que no sea la capa actual MVC

  2. Reutilización el mecanismo de validación en ambos lugares (validación Bean, por ejemplo)

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