Minha equipe está desenvolvendo um aplicativo financeiro baseado na WEB e houve uma discussão com um colega sobre como manter os cálculos - puramente no back-end ou também no front-end?
Breve explicação: Estamos usando Java (ZK, Spring) para front-end e Progress 4gl para back-end. Os cálculos que envolvem alguns dados e matemática hardcore do banco de dados são mantidos no back-end, então não estou falando sobre eles. Eu estou falando sobre a situação em que o usuário digita o valor X, é então adicionado ao valor Y (mostrado na tela) e o resultado é mostrado no campo Z. Operações puras e simples com jQuery-ish, quero dizer.
Então, qual seria a melhor prática aqui:
1) Adicione valores com JavaScript que evite ir para o back-end e back-end e depois os valide no back-end "ao salvar"?
2) Mantenha toda a lógica de negócios no mesmo local - portanto, traga os valores para o back-end e faça os cálculos lá?
3) Faça os cálculos no front-end; em seguida, envie os dados para o back-end, valide-os lá, faça os cálculos novamente e somente se os resultados forem válidos e iguais, os exiba para o usuário?
4) Algo mais?
Nota: Fazemos alguma validação básica em Java, mas a maioria ainda está no back-end, como todas as outras lógicas de negócios.
O aumento dos dados que seriam enviados recalculando tudo em um back-end não seria um problema (tamanho XML pequeno; servidores e largura de banda suportariam o aumento da quantidade de operações realizadas pelos usuários).
Respostas:
Como sempre, essas decisões envolvem uma troca entre objetivos diferentes, alguns dos quais conflitam entre si.
A eficiência sugere que você faça cálculos no front-end - tanto porque o computador do usuário consome mais energia e o servidor quanto menos, e porque o usuário vê um feedback mais rápido, o que melhora a experiência do usuário.
A segurança exige que qualquer operação de alteração de estado não possa confiar nos dados que estão sendo verificados ou computados no computador cliente, porque o computador cliente pode estar sob o controle de um invasor mal-intencionado. Portanto, você deve validar qualquer coisa proveniente de fontes não confiáveis do lado do servidor.
A eficiência e a manutenção da programação sugerem que você não deve fazer o mesmo cálculo duas vezes por causa do esforço desperdiçado.
Superficialmente, isso soa como se tudo tivesse que ser feito no lado do servidor, mas nem sempre é esse o caso. Se você pode manter facilmente o código duplicado (por exemplo, gerando automaticamente um validador javascript a partir do seu validador Java do lado do servidor), a repetição da computação pode ser uma boa solução. Se todos os dados envolvidos não são importantes, por exemplo, se o usuário puder enganar apenas a si próprio e não a você, se manipular valores, a validação no servidor não será necessária. Se o seu tempo de resposta for dominado por gargalos completamente diferentes, de modo que um atraso de ida e volta não seja perceptível, as considerações de UX não serão decisivas etc. Portanto, você deve considerar a força de cada uma dessas pressões na sua situação e decidir de acordo. .
fonte
Programming efficiency and maintainability suggests that you shouldn't do the same computation twice because of the wasted effort.
não está correto porque [1] a validação no front-end pode fornecer um feedback rápido ao usuário para fazer as correções, se necessário. [2] A validação no back-end não é tão responsiva e, portanto, não fornece ao usuário a melhor oportunidade para fazer correções. O usuário precisaria esperar e refazer mais trabalho. Então, acho que as duas validações não são exatamente iguais.Existem fortes razões para fazer cálculos no back-end
Minha recomendação
fonte