Mon équipe est en train de développer une application financière basée sur le WEB et il y a eu une petite dispute avec un collègue pour savoir où garder les calculs - purement en back-end ou en garder aussi en front-end?
Brève explication: nous utilisons Java (ZK, Spring) pour le front-end et Progress 4gl pour le back-end. Les calculs qui impliquent des calculs et des données hardcore de la base de données sont conservés en back-end, donc je ne parle pas d'eux. Je parle de la situation où l'utilisateur entre la valeur X, il est ensuite ajouté à la valeur Y (affichée à l'écran) et le résultat est affiché dans le champ Z. jQuery pure et simple -des opérations, je veux dire.
Quelle serait donc la meilleure pratique ici:
1) Ajouter des valeurs avec JavaScript qui évite d'aller au back-end et au back puis les valider au back-end "on save"?
2) Gardez toute la logique métier au même endroit - apportez donc les valeurs au back-end et faites les calculs là-bas?
3) Faites les calculs dans le front-end; puis envoyer des données au back-end, les valider là-bas, refaire les calculs et seulement si les résultats sont valides et égaux, les afficher à l'utilisateur?
4) Autre chose?
Remarque: Nous effectuons une validation de base dans Java mais la majeure partie est toujours dans le back-end comme toutes les autres logiques métier.
L'augmentation des données qui seraient envoyées en recalculant tout dans un back-end ne serait pas un problème (petite taille XML; les serveurs et la bande passante résisteraient à la quantité accrue d'opérations effectuées par les utilisateurs).
Comme toujours, ces décisions impliquent un compromis entre différents objectifs, dont certains sont en conflit les uns avec les autres.
L'efficacité suggérerait que vous effectuiez des calculs dans le front-end - à la fois parce que l'ordinateur de l'utilisateur utilise plus d'énergie et votre serveur utilise moins, et parce que l'utilisateur voit des commentaires plus rapides, ce qui améliore l'expérience utilisateur.
La sécurité exige que toute opération de changement d'état ne peut pas s'appuyer sur des données vérifiées ou calculées sur l'ordinateur client, car l'ordinateur client peut être sous le contrôle d'un attaquant malveillant. Par conséquent, vous devez valider tout ce qui provient de sources non fiables côté serveur.
L'efficacité et la maintenabilité de la programmation suggèrent que vous ne devriez pas faire deux fois le même calcul à cause de l'effort inutile.
Superficiellement, cela semble que tout doit être fait côté serveur, mais ce n'est pas toujours le cas. Si vous pouvez facilement conserver le code dupliqué (par exemple en générant automatiquement un validateur javascript depuis votre serveur Java), alors répéter le calcul peut être une bonne solution. Si les données impliquées sont tous sans importance, par exemple si l'utilisateur ne peut tricher que lui-même et pas vous s'il manipule des valeurs, alors la validation côté serveur n'est pas nécessaire. Si votre temps de réponse est dominé par des goulots d'étranglement complètement différents de sorte qu'un délai d'aller-retour n'est pas perceptible, alors les considérations UX ne sont pas décisives, etc. Par conséquent, vous devez considérer la force de chacune de ces pressions dans votre situation, et décider en conséquence.
Il y a de bonnes raisons de faire des calculs dans le backend
Ma recommandation