Quando è opportuno fare calcoli in front-end?

15

Il mio team sta sviluppando un'applicazione di finanziamento basata sul WEB e c'era un po 'di discussione con un collega in cui mantenere i calcoli - puramente nel back-end o anche nel front-end?

Breve spiegazione: Stiamo usando Java (ZK, Spring) per front-end e Progress 4gl per back-end. Calcoli che coinvolgono matematica e ampli hardcore i dati dal database sono tenuti nel back-end, quindi non sto parlando di loro. Sto parlando della situazione in cui l'utente inserisce il valore X, viene quindi aggiunto al valore Y (mostrato nella schermata) e il risultato viene visualizzato nel campo Z. Operazioni jQuery-ish pure e semplici, intendo.

Quindi quale sarebbe la migliore pratica qui:

1) Aggiungi valori con JavaScript che salva dal back-end e viceversa e poi li convalida sul back-end "in salvataggio"?

2) Mantieni tutte le logiche di business nello stesso posto - quindi porta i valori al back-end e fai i calcoli lì?

3) Effettua i calcoli nel front-end; quindi inviare i dati al back-end, convalidarli, eseguire nuovamente i calcoli e solo se i risultati sono validi e uguali, mostrarli all'utente?

4) Qualcos'altro?

Nota: eseguiamo alcune convalide di base in Java, ma la maggior parte di esse è ancora nel back-end come tutte le altre logiche di business.

L'aumento dei dati che verrebbero inviati ricalcolando tutto in un back-end non sarebbe un problema (dimensioni XML ridotte, server e larghezza di banda sarebbero in grado di sopportare la maggiore quantità di operazioni eseguite dagli utenti).

    
posta IgnasK 04.08.2014 - 13:38
fonte

2 risposte

32

Come sempre, tali decisioni implicano un compromesso tra obiettivi diversi, alcuni dei quali in conflitto tra loro.

  • L'efficienza suggerirebbe di eseguire calcoli nel front-end - sia perché in questo modo il computer dell'utente utilizza più energia e il server ne usa meno, sia perché l'utente vede un feedback più rapido, migliorando l'esperienza utente.

  • La sicurezza richiede che qualsiasi operazione di modifica dello stato non possa basarsi su dati controllati o calcolati nel computer client, perché il computer client potrebbe essere sotto il controllo di un malintenzionato. Pertanto, devi convalidare qualsiasi cosa provenga da fonti non attendibili sul lato server.

  • L'efficienza e la manutenibilità della programmazione suggeriscono che non si dovrebbe eseguire lo stesso calcolo due volte a causa dello sforzo inutile.

Sufficientemente sembra che tutto debba essere eseguito sul lato server, ma non è sempre così. Se è possibile mantenere facilmente il codice duplicato (ad esempio, generando automaticamente un validatore javascript dal proprio validatore Java sul lato server), ripetere il calcolo può essere una buona soluzione. Se i dati coinvolti non sono importanti, ad es. se l'utente può imbrogliare solo se stesso e non se manipola valori, allora la convalida lato server non è necessaria. Se il tempo di risposta è dominato da colli di bottiglia completamente diversi in modo che un ritardo di andata e ritorno non sia percepibile, le considerazioni sulla UX non sono decisive, ecc. Pertanto, è necessario considerare quanto è strong ciascuna di queste pressioni nella tua situazione e decidi di conseguenza.

    
risposta data 04.08.2014 - 13:46
fonte
11

Esistono validi motivi per eseguire calcoli nel back-end

  • La logica aziendale non appartiene al livello di presentazione
  • La logica aziendale in JavaScript rappresenta una minaccia
  • Presumi che ci sia un front-end - > relazione one-back-end che non è sempre vera , i back-end dovrebbero essere pensati come capaci o servire più di un'applicazione front-end, quindi non puoi assumere nulla.
  • Se i calcoli utilizzano una grande quantità di dati, non sarebbe efficiente tenerli nel front-end
  • Se i calcoli utilizzano il database, non potrai replicarlo nel front-end

Il mio consiglio

  • Chiedi al database di applicare tutte le regole aziendali possibili nel modello, incluse le chiavi esterne, le chiavi primarie, i vincoli di controllo e i trigger
  • Chiedi al livello aziendale di generare eccezioni quando le regole aziendali non vengono soddisfatte (perché il database ha restituito un errore o perché il livello aziendale stesso ha convalidato i dati)
  • Se e solo se il tempo di risposta è inaccettabile, fai convalide o pre-elaborazione usando Ajax (il lavoro non sarà fatto in JavaScript, sarà fatto nel back-end senza dover ricaricare la pagina)
  • Puoi eseguire una semplice convalida in JavaScript come se non permettessi un valore vuoto, o valori troppo lunghi o fuori intervallo (per questi ultimi potresti voler generare gli intervalli nel back-end)
risposta data 04.08.2014 - 14:38
fonte

Leggi altre domande sui tag