私のチームはWEBベースのファイナンスアプリケーションを開発していて、計算をどこに保存するかを同僚と少し議論しました。
簡単な説明:フロントエンドにJava(ZK、Spring)を使用し、バックエンドにProgress 4glを使用しています。データベースからのハードコア数学とデータを含む計算はバックエンドに保持されます。ユーザーについて値Xを入力すると、値Y(画面に表示)に追加され、結果がフィールドZに表示されます。純粋で単純なjQueryっぽい操作ですね。
したがって、ここでのベストプラクティスは何でしょうか。
1)バックエンドへの行き来を保存するJavaScriptで値を追加し、バックエンドで「保存時」にそれらを検証しますか?
2)すべてのビジネスロジックを同じ場所に保持します。つまり、値をバックエンドに持ってきて、そこで計算を行いますか?
3)フロントエンドで計算を行います。次に、データをバックエンドに送信し、そこで検証し、再度計算を行い、結果が有効で等しい場合にのみ、ユーザーに表示しますか?
4)他に何かありますか?
注:Javaでいくつかの基本的な検証を行いますが、そのほとんどは他のすべてのビジネスロジックと同様にバックエンドにあります。
バックエンドのすべてを再計算することによって送信されるデータの増加は問題になりません(XMLサイズが小さい。サーバーと帯域幅は、ユーザーが実行する操作量の増加に耐えます)。
いつものように、そのような決定は異なる目標間のトレードオフを伴い、そのいくつかは互いに矛盾します。
効率性から、フロントエンドで計算を実行することをお勧めします。これは、ユーザーのコンピューターがより多くの電力を使用し、サーバーがより少ない電力を使用するためと、ユーザーがより高速なフィードバックを参照してユーザーエクスペリエンスを向上させるためです。
クライアントコンピューターは悪意のある攻撃者の制御下にある可能性があるため、セキュリティでは、すべての状態変更操作できないがクライアントコンピューターでチェックまたは計算されるデータに依存している必要があります。したがって、あなたはmustサーバーサイドの信頼できないソースからのものをすべて検証します。
プログラミングの効率と保守性は、無駄な労力のために同じ計算を2度行うべきではないことを示唆しています。
これは表面的にはすべてサーバー側で実行する必要があるかのように聞こえますが、常にそうであるとは限りません。複製されたコードを簡単に維持できる場合(たとえば、サーバー側からJavaScriptバリデーターを自動生成するJavaバリデーター)場合は、計算を繰り返すことが良い解決策になる可能性があります。関連するデータがすべて重要ではありません。たとえば、ユーザーが値を操作する場合、ユーザーだけがごまかすことができる場合は、サーバー側の検証は不要です。応答時間が完全に異なるボトルネックに支配されているため、往復遅延が認識されない場合、その場合、UXの考慮事項は決定的ではありません。したがって、これらの圧力のそれぞれが状況にあるどれだけ強いかを考慮し、それに応じて決定する必要があります。
バックエンドで計算を行うには強い理由があります
私の推薦