私はこの問題を処理するいくつかの異なる方法を試しました。どちらが最善の方法かはわかりませんが、どちらもうまくいったので、ここで説明し、お役に立てば幸いです。
コアコンセプトはどちらも同じです。定数はサーバー側言語(私の場合はC#とJava)で真の定数として定義され、クライアントの利益のためにJSONまたはjavascriptに変換されます。単一のJSON/YML / etcを共有するのではなく、これが進むべき道だと思います。構成ファイル。javascriptに真の定数がないからといって、サーバーにも定数がないはずではありません。
オプション1:Webサービス呼び出しを介して実行時に定数と列挙をロードします。
/enums
基本的にすべてのサーバー側の列挙と定数を1つの大きなJSONの塊に収集するサービスエンドポイント(これを呼びましょう)を作成します。余分なサービス呼び出しを回避するために、サーバー側のテンプレートフレームワークも使用している場合は、これをにブートストラップできますindex.html
。
静的コンテンツに何もブートストラップしたくない場合は、他の最適化を行うことができます。定数が変更されることはめったにないため/enums
、サーバーアプリケーションのビルドバージョンを含むラッパーオブジェクトに応答をラップできます。例えば:
{
"version": "1.2.1.0",
"enums": { ... }
}
ユーザーが初めてページにアクセスしたときに、リクエストを送信GET /enums
し、応答全体をブラウザのローカルストレージに保存します。以降の訪問では、ローカルストレージから定数を読み取り、。を使用して定数を要求しGET /enums?v=1.2.1.0
ます。サーバーは、そのバージョンを渡されたバージョンと比較する必要があり、それらが同一である場合はHTTP 200 OK
、列挙がまだ有効であることをクライアントに示すためだけに戻ります。
このオプションは、フロントエンド開発者とバックエンド開発者が異なるツールを使用している分散環境で作業している場合、または通常は緊密に連携していない場合に適しています。
オプション2:ビルドプロセスの一部として定数を共有する
テキスト変換テンプレート(T4など)を使用して、サーバー側の言語ソースからjavascriptコードを生成できます。私の場合、これはC#でした。
すべてのサーバー側の列挙を1つのディレクトリに保存し、ビルドタスクを実行して、そのディレクトリ内のすべてのC#ソースファイルをjavascriptオブジェクトに変換enums.js
し、クライアント側のソースツリーで1つのファイルに結合しました。
これが好ましいオプションであることがわかりましたが、クライアントとサーバーの開発が同期的に行われない場合(一緒に構築され、一緒にリリースされる)、依存関係の管理がかなり厄介になる可能性があります。私の場合、私は常にクライアントとサーバーの両方を一緒にデプロイしたので、これはうまくいきました。