便利なタイプのサービスを提供するWebサイトに関するクライアント側とサーバー側の計算について疑問に思っていました。たとえば、特定の日付を入力し、そのWebサイトに今日からその日までの日数がわかるオンラインWebサイトがあります。または、入力した数式を解くための手順を説明するWebサイト。これらのタイプのWebサイトは、サーバーサイドでの計算を保証しますか?
この質問に対する単純な答えはありません。これを実現できるソフトウェアアーキテクチャ/展開戦略は多数あります。それはすべて、アプリケーションがどれほど複雑で、いつの日かどれだけ複雑になるかによって異なります。
単純なMVCタイプのアーキテクチャから始めましょう。ここでは、クライアント側のコードを主にビュー、サーバーをコントローラーとして扱い、ビュー(コントローラー)間でモデル(つまり、データ)を転送します。これにより、すべてのロジックを1か所に保持し、複数のビュー(例:電話アプリ、Webサイト、さらにはテキストプロンプトインターフェイス)を提供できます。ここまでは順調ですね。
ただし、これを行うと、ビュー自体の内部に複数のMVCを定義するようになります。すべてのコントローラーをサーバー側に委任すると、設計が複雑になったり、パフォーマンスが低下したりします(サーバー側またはクライアント側で2 + 2を実行しますか?)。したがって、ある時点で、サーバー側でのコントローラーの構築を停止する必要があります。芸術はどこでやめるべきかを知ることです。
3つの簡単なガイドラインが役立ちます。まず、計算/アルゴリズムが世界の定数であり、アプリケーションの「ビジネス」ロジックとは無関係である場合、通常はクライアント側でコーディングできます。第2に、アルゴリズムが複雑な場合(他のサーバーや独自のサーバーから大量のデータが必要であり、一般的なユーザーにはないCPUが必要な場合など)は、そうしたくない場合があります。第3に、誰かがロジックをリバースエンジニアリングするのを恐れて、独自のEdgeを提供するロジックをクライアント側に出荷したくない場合があります。
方程式の分解問題を見てみましょう。これは簡単ではなく、特定の問題を解決する複数の方法(既存のステップを簡略化するための簡単なステップの追加を含む)があり、構築にコストがかかるため変更できます(そのため、苦労して稼いだアルゴリズムを誰かに盗まないようにする必要があります)。