¿Cuándo es apropiado hacer cálculos en el front-end?

14

Mi equipo está desarrollando una aplicación de financiamiento basada en WEB y hubo una pequeña discusión con un colega sobre dónde guardar los cálculos, ¿solo en el back-end o también algunos en el front-end?

Breve explicación: Estamos utilizando Java (ZK, Spring) para front-end y Progress 4gl para back-end. Cálculos que involucran algunas matemáticas incondicionales & los datos de la base de datos se guardan en el back-end, así que no estoy hablando de ellos. Estoy hablando de la situación en la que el usuario ingresa el valor X, luego se agrega al valor Y (mostrado en la pantalla) y el resultado se muestra en el campo Z. Quiero decir, operaciones puras y simples de jQuery-ish.

Entonces, ¿cuál sería la mejor práctica aquí?

1) Agregue valores con JavaScript que evite ir al back-end y al back-end y luego valídelos en el back-end "on save"?

2) Mantenga toda la lógica de negocios en el mismo lugar; por lo tanto, lleve los valores al back-end y haga los cálculos allí.

3) Haz los cálculos en el front-end; luego envíe los datos al back-end, valídelos allí, haga los cálculos nuevamente y solo si los resultados son válidos e iguales, muéstrelos al usuario?

4) ¿Algo más?

Nota: hacemos una validación básica en Java, pero la mayor parte todavía está en el back-end como toda la lógica empresarial.

El aumento de los datos que se enviarían al recalcular todo en un back-end no sería un problema (pequeño tamaño XML; los servidores y el ancho de banda soportarán la mayor cantidad de operaciones realizadas por los usuarios).

    
pregunta IgnasK 04.08.2014 - 13:38

2 respuestas

32

Como siempre, estas decisiones implican un intercambio entre diferentes objetivos, algunos de los cuales entran en conflicto entre sí.

  • La eficiencia sugeriría que realice cálculos en el front-end, tanto porque de esa manera la computadora del usuario usa más energía y su servidor usa menos, y porque el usuario ve una retroalimentación más rápida, lo que mejora la experiencia del usuario.

  • La seguridad exige que cualquier operación de cambio de estado no pueda confiar en que los datos se verifiquen o computen en la computadora cliente, ya que la computadora cliente puede estar bajo el control de un atacante malicioso. Por lo tanto, debe validar cualquier cosa que provenga de fuentes no confiables del lado del servidor.

  • La eficiencia de la programación y la capacidad de mantenimiento sugieren que no debe hacer el mismo cálculo dos veces debido al esfuerzo inútil.

Superficialmente, esto suena como si todo tuviera que hacerse desde el lado del servidor, pero no siempre es así. Si puede mantener fácilmente el código duplicado (por ejemplo, mediante la generación automática de un validador de javascript desde su validador Java del lado del servidor), repetir el cálculo puede ser una buena solución. Si los datos involucrados no son importantes, por ejemplo, Si el usuario solo puede engañarse a sí mismo y no a usted si manipula los valores, la validación del lado del servidor no es necesaria. Si su tiempo de respuesta está dominado por cuellos de botella completamente diferentes para que no se perciba un retraso de ida y vuelta, las consideraciones de UX no son decisivas, etc. Por lo tanto, debe considerar cuán fuerte cada una de estas presiones es en su situación, y decida en consecuencia.

    
respondido por el Kilian Foth 04.08.2014 - 13:46
11

Hay fuertes razones para hacer cálculos en el backend

  • La lógica de negocios no pertenece a la capa de presentación
  • La lógica de negocios en JavaScript representa una amenaza
  • Supones que hay un extremo frontal - > Una relación de back-end que no siempre es cierta , debe pensarse que los back-end son capaces o que sirven a más de una aplicación de front-end, por lo que no puede asumir nada.
  • Si los cálculos utilizan una gran cantidad de datos, no sería eficiente mantenerlos en la parte frontal
  • Si los cálculos utilizan la base de datos, no podrá replicarlos en el extremo frontal

Mi recomendación

  • Haga que la base de datos aplique la mayor cantidad posible de reglas de negocios en el modelo, incluidas las claves foráneas, claves primarias, restricciones de verificación y activadores
  • Haga que la capa empresarial lance excepciones cuando no se cumplan las reglas comerciales (ya sea porque la base de datos devolvió un error o porque la propia capa empresarial validó los datos)
  • Si y solo si el tiempo de respuesta es inaceptable, realice validaciones o preprocesamiento utilizando Ajax (el trabajo no se realizará realmente en JavaScript, se hará en el backend sin tener que volver a cargar la página)
  • Puede hacer una validación simple en JavaScript como si no permitiera un valor vacío, o valores demasiado largos o fuera de rango (para este último es posible que desee generar los rangos en el back-end)
respondido por el Tulains Córdova 04.08.2014 - 14:38

Lea otras preguntas en las etiquetas