2016-10-03 5 views
1

何か(私の場合はフィルタ)がクライアントに保存されている場合(例:localStorage)、格納するデータを移行するためにユーザー/バージョンごとにスクリプトを1回実行する必要があります。たとえば、最初にlocalStorageに保存されたフィルタがあり、キーはmyFilterです。環境ごとにフィルタを分割する必要があると判断した後に別途dev-myFiltertrain-myFilterなどが必要です。環境依存フィルタで動作するようにコードを更新しますmyFilterのユーザーがいて、次に展開されたバージョンでスクリプトを実行して、保存されているフィルタのキーを更新するスクリプトが必要な場合があります。JS「アップグレード」パターン

質問です - それはパターン/ベストプラクティスとは何ですか?

+0

データが流動的な場合は、localStorageを使用しないようにしてください。 – Pogrindis

+0

@Pogrindis私はReduxを使用しています。初期状態では、localStorageをチェックして何か設定されている場合に使用します。なぜlocalStorageを使用しない方が賢明でしょうか? –

答えて

1

「ベストプラクティス」についてはわかりませんが、明らかな技術的解決策は、APIやストレージフォーマットと同様に、データの横にバージョン番号を格納することです。初めからそうしていなければ、存在しなければバージョン== 1と仮定します。

データ構造がの場合は、のバージョン間でユニークなので、バージョンを調べるだけでそのバージョンを判別できます。

いずれにしても、ユーザーのデータが古い形式であることがわかったときにはいつでも、変換を実行するだけです。

これの欠点は、チェックする必要があることです。 Webアプリケーションの場合、これはボトルネックになる可能性は低いですが、データを前方互換性にすることができれば、各リクエストで少しの処理時間を節約することができます。しかし、データが有用であるためには、とにかくそれを読まなければならないので、後方互換性を維持したい限り、少しの分岐は、大きな問題ではないでしょう。

+0

私は毎回チェックを実行するのが好きではありません。さらに、いくつかのバージョンの違い+バージョニングを含むいくつかのデータ構造が存在する可能性があります。私はあなたが指定した別のファイルを考えていました。このバージョンでは、このスクリプトを実行してそれに応じてデータを変換しますが、ユーザーがアップグレードを逃したときに問題があり、v1からv8に簡単にアップグレードできません。それはステップバイステップで行い、毎回これらのチェックを実行する必要があります: –