1

Web アプリケーションのシナリオがあり、それをより適切に設計する方法について提案を求めています。

収集と分析というアプリケーションを実行する必要があります。収集が行われている場合、ユーザーはこの収集が行われていることを常に通知する必要があり、分析についても同様です。システムは、ユーザーが実行した最後の 10 個の収集と分析も表示します。

ユーザーがシステムを操作しているとき、進行中の収集と分析 (したがって、最後の収集/分析) は非常に頻繁に変更され続けます。これらの情報は非常に動的であるため、適切に表示するためにこれらの情報を保存するさまざまな方法を検討した後、HTML5 のlocalStorageを使用することにし、すべて JavaScript で行っています。

保存方法は次のとおりです。

  • コレクション進行中: (ITEMNAME を受け取る addItem という関数で設定)

    • キー: c_ITEMNAME_ストレージ

    • 値: c_ITEMNAME

  • Collection Finished または Error: (itemname も受け取り、対応するキーの値を変更する editItem という関数によって設定されます)

    • キー: c_ITEMNAME_ストレージ

    • 値: c_Finished_ITEMNAME または c_Error_ITEMNAME

  • 最後の 10 コレクションのコレクション (ITEMNAME を受け取り、現在の日時でキーを準備する addItemLastCollections という関数によって設定されます)

    • キー: ORDERNUMBER_c_ITEMNAME_DATE_TIME

    • 値: c_ITEMNAME

注: 順序番号は 0 から 9 までで、各コレクションが終了すると番号 0 を受け取ります。同時に、番号 9 は addItemLastCollections 関数が呼び出されると削除されます。

分析はほとんど同じですが、唯一の違いは "c" が "a" になることです。

とにかく、あなたはその考えを理解したと思いますが、不明な点があればお知らせください。

私が欲しいのは、他のアプローチの意見と提案です。これは、うまく機能しているにもかかわらず、非効率的で非現実的だと考えているからです。メンテナンスしやすいものが欲しい。おそらく localStorage に固執するのが最善だと思いますが、そうではありません。JavaScript でのデザイン パターンの使用にはあまり詳しくありませんが、Java で頻繁に使用するものもあります。誰かが私にそれを手伝ってくれるなら、それは良いことです。

EDIT : なぜ効率が悪いと感じるのかを正確に説明するのは、私にとっても少し難しいです。主な理由は、各ケース (Progress、Finished、Error、Last Collections) ごとにメソッドを呼び出して文字列を変更し (下線やその他の情報を追加)、データにアクセスする必要があるためだと思います (たとえば、それらのそれぞれの名前または日付) をテストして、どのケースであるかを確認し、split( _ )を使用し続ける必要があります。これはそれほど簡単ではないことはわかっていますが、このアプローチ全体をより適切に設計できると思います。私はソフトウェアのこの部分で一人で作業しているので、話し合うことができる人がいないので、ここはアイデアを交換するのに良い場所だと思いました :)

前もって感謝します!

4

1 に答える 1

2

あなたが何を探しているのか正確にはわかりません。通常、アプリケーションに適合する文字列化されたバージョンのオブジェクトを格納するためだけに localStorage を使用します。localStore 内の変数ごとにあらゆる種類の異なるキーを設定するのではなく、オブジェクトの文字列化されたバージョンを localStorage の 1 つのキーにダンプするだけです。そうすれば、JSON としてサーバーから取得する場合でも、ローカルからプルする場合でも、データは同じ構造になります。

JSON.stringify( object) および JSON.parse( 'string from store'); を使用して、深くネストされたオブジェクト/配列をすばやく保存または取得できます。

例: サーバーから JSON として送信された私のアプリ オブジェクト (これは適切な引用された JSON ではないことに気付きました)

var data={ foo: {bar:[1,2,3], baz:[4,5,6,7]},
  foo2: {bar:[1,2,3], baz:[4,5,6,7]}
}
saveObjLocal( 'app_analysis', data);

function saveObjLocal( key, obj){
   localStorage.set( key, JSON.stringify(obj)
}

function getlocalObj( key){
   return JSON.parse( localStorage.get(key) );
}

var analysisObj= =getlocalObj('app_analysis');
alert( analysisObj.foo.bar[2])
于 2013-10-31T22:55:07.057 に答える