Tim saya sedang mengembangkan aplikasi keuangan berbasis WEB dan ada sedikit perdebatan dengan seorang kolega di mana harus menyimpan perhitungan - murni di back-end atau menyimpan beberapa di front-end juga?
Penjelasan singkat: Kami menggunakan Java (ZK, Spring) untuk front-end dan Progress 4gl untuk back-end. Perhitungan yang melibatkan beberapa matematika hardcore & data dari database disimpan di back-end, jadi saya tidak membicarakannya. Saya berbicara tentang situasi di mana pengguna memasukkan nilai X, kemudian ditambahkan ke nilai Y (ditampilkan di layar) dan hasilnya ditampilkan di bidang Z. Operasi jQuery-ish murni dan sederhana, maksud saya.
Jadi apa yang akan menjadi praktik terbaik di sini:
1) Tambahkan nilai dengan JavaScript yang menyelamatkan dari pergi ke back-end dan kembali dan kemudian memvalidasi mereka di back-end "on save"?
2) Menyimpan semua logika bisnis di tempat yang sama - karena itu membawa nilai-nilai ke back-end dan melakukan perhitungan di sana?
3) Lakukan perhitungan di front-end; kemudian kirim data ke back-end, validasi di sana, lakukan perhitungan lagi dan hanya jika hasilnya valid dan sama, tampilkan ke pengguna?
4) Sesuatu yang lain?
Catatan: Kami melakukan beberapa validasi dasar di Jawa tetapi sebagian besar masih di back-end karena semua logika bisnis lainnya.
Peningkatan data yang akan dikirim dengan menghitung ulang semua yang ada di back-end tidak akan menjadi masalah (ukuran XML kecil; server dan bandwidth akan menahan peningkatan jumlah operasi yang dilakukan oleh pengguna).
Jawaban:
Seperti biasa, keputusan semacam itu melibatkan pertukaran antara berbagai tujuan, yang beberapa di antaranya saling bertentangan.
Efisiensi menyarankan agar Anda melakukan perhitungan di front-end - baik karena cara itu komputer pengguna menggunakan lebih banyak daya dan server Anda menggunakan lebih sedikit, dan karena pengguna melihat umpan balik yang lebih cepat, yang meningkatkan pengalaman pengguna.
Keamanan menuntut agar setiap operasi yang mengubah keadaan tidak dapat mengandalkan data yang sedang diperiksa atau dihitung di komputer klien, karena komputer klien mungkin berada di bawah kendali penyerang jahat. Oleh karena itu, Anda harus memvalidasi apa pun yang berasal dari sumber yang tidak tepercaya di sisi server.
Memprogram efisiensi dan pemeliharaan menunjukkan bahwa Anda tidak harus melakukan perhitungan yang sama dua kali karena usaha yang sia-sia.
Dangkal ini terdengar seolah-olah semuanya harus dilakukan di sisi server, tetapi itu tidak selalu terjadi. Jika Anda dapat dengan mudah mempertahankan kode duplikat (mis. Dengan secara otomatis membuat validasi javascript dari Java validator sisi-server Anda), maka mengulangi perhitungan dapat menjadi solusi yang baik. Jika data yang terlibat semuanya tidak penting, misalnya jika pengguna hanya bisa menipu diri mereka sendiri dan bukan Anda jika mereka memanipulasi nilai, maka validasi sisi server tidak diperlukan. Jika waktu respons Anda didominasi oleh hambatan yang sangat berbeda sehingga penundaan pulang-pergi tidak terlihat, maka pertimbangan UX tidak menentukan, dll. Oleh karena itu, Anda harus mempertimbangkan seberapa kuat masing-masing tekanan ini dalam situasi Anda, dan memutuskan dengan tepat .
sumber
Programming efficiency and maintainability suggests that you shouldn't do the same computation twice because of the wasted effort.
tidak benar karena [1] Validasi di front-end dapat memberikan umpan balik cepat kepada pengguna untuk melakukan koreksi jika diperlukan. [2] Validasi di back-end tidak responsif, dan dengan demikian tidak memberikan pengguna kesempatan terbaik untuk melakukan koreksi. Pengguna harus menunggu dan mengulangi lebih banyak pekerjaan. Jadi saya pikir kedua validasinya tidak persis sama.Ada alasan kuat untuk melakukan perhitungan di backend
Rekomendasi saya
sumber