2010-06-29 34 views
7

Me siento un poco en conflicto en este momento. Tengo una aplicación web que utiliza Stripes para un framework MVC y Spring/Hibernate para el back-end. Tengo un método de registro de la cuenta en mi capa MVC que requiere la siguiente validación:¿Debo duplicar la validación en mi capa MVC y capa de servicio?

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

tengo una método de validación en Stripes (capa MVC) que verifica estos dos casos pero se preguntaba si mi capa de servicio debería duplicar estos controles. Si la interfaz de capa de servicio se expuso como un servicio web, entonces creo que la validación sería una buena idea, pero si se usa solo en el contexto de una aplicación web, ¿es necesario?

Editar: No tengo la intención de duplicar el código de validación, es decir, duplicar las llamadas al método de validación en dos lugares.

veo mis opciones como:

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

¿Qué es mejor práctica aquí? Estoy buscando consejos/opiniones sobre la opción que debo elegir y por qué.

Tenga en cuenta que hay comprobaciones de validación simples en los campos de entrada del formulario de registro (como la comprobación de espacios en blanco) y que creo que estos deben ser manejados por la validación de MVC solamente; Solo me preocupan las validaciones más complejas.

Respuesta

1

Annie,

Buena pregunta, me he preguntado lo mismo en muchas ocasiones. Aquí es a lo que terminé (hasta ahora).

El enfoque más puro (pero tedioso) es invocar la lógica de validación en ambas capas. el enfoque pragmático podría ser invocarlo solo en el sitio web (por ejemplo, sus controladores).

Creo que no hay respuesta que termine toda discusión. Creo que depende del contexto de tu proyecto. Si el tamaño del proyecto es modesto (en términos de personas y tamaño de la base de código), confía en que no muchos otros desarrollarán código que invoque su API de servicio (hasta el punto de que no podrá supervisar), entonces hacer la validación en la capa web solo puede ser suficiente.

Sin embargo, si espera muchos clientes puede necesitar un nivel de seguridad más alto. Cuando digo seguridad aquí, me refiero a ella como el nivel de consistencia: garantías que necesita. Si ese nivel es alto, no hay forma de evitarlo: tendrá que hacerlo tanto en el servicio (por seguridad) como en la capa web (principalmente para poder proporcionar a los usuarios finales una experiencia aceptable).

Así que el factor clave aquí es la seguridad y la cantidad que realmente necesita. Si necesita mucho, opta por el enfoque "purista". Si su aplicación no toma exactamente decisiones que se refieren a asuntos de vida o muerte, opte por un enfoque pragmático.

5

No duplicar el código. Use JSR303 Bean Validation para que pueda usar la misma lógica de validación en todas las capas de su aplicación.

Hibernate Validator (un proyecto separado del material de Hibernate ORM) proporciona la implementación de referencia de esta interfaz. Es muy fácil de usar, puedes get started with it very quickly.

+0

Sí, no quiero decir que voy a duplicar el código de validación. Quiero decir que llamaré al mismo código de validación en dos lugares. – JMM

+0

Como mencionaste, entonces realmente tienes que hacer la validación dos veces, en Si tiene otros clientes además de la capa de controlador. Potencialmente, podría ver potencialmente querer tener una lógica de validación diferente también –

1
  1. Idealmente, hacer la validación en ambas capas, ya que su capa de servicio se puede usar con un cliente distinta de la capa mvc actual

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

3

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

  • La validación de datos de formato: que debe validarse 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 validada en la capa de servicio

En el caso de que sus validaciones están relacionadas con las reglas de negocio, por lo que los pondrá sólo en el capa de servicio. Además, si duplica sus validaciones en ambas capas, realizará las mismas consultas dos veces, lo que ralentizará el rendimiento de su aplicación.

Cuestiones relacionadas