0

特定のデータをローカルに保存し、切断された場合にアクセスできる SL アプリを作成したいと考えています。サービス内のエンティティを公開し (dtos なし)、分離ストレージに保存できると思います。サービスは WCF ria サービスですが、SL アプリはどうでしょうか。「ローカルで切断されたキャッシュ モデル」を持つための最良の方法はどれですか?

前もって感謝し、メリークリスマス

4

2 に答える 2

3

その質問に率直に答える人は、彼が何について話しているのかわかりません。

最大の課題の 1 つ (「開発者が実際に採用されている理由」を参照) は、切断されたクライアントを作成するのが難しいことです。
それほど難しくはありませんが、ソフトウェア エンジニアリングの経験と初期のトレードオフと計画が必要です。

あなたが尋ねた質問は、基本的に「スマート クライアントを構築するにはどうすればよいですか?」というものです。
このトピックについて書かれた素晴らしい本がたくさんあり、まさにこのトピックについて何十ものフレームワークが出荷されています。だから、私が言ったように、ここで簡単な答えはありません。

最初に自問する必要があるのは、どのレベルの Smart Client が必要かということです。
完全に切断されたクライアントを構築していますか? セミオンライン/オフラインのクライアントですか? 部分的に有効なオフライン クライアントですか? などなど

私が通常それを見る方法は、機能を通してです:

  • サポートしようとしているシナリオは、一時的なネットワーク接続の損失ですか?
    または、ネットワーク接続の切断が長引いていますか?

オフライン時間の長さ (より具体的には、アプリの再起動があるかどうか) によって、キャッシュがディスクに保存されるか、RAM に信頼できるかが決まります。

  • クライアントは、ネットワーク接続を使用して起動することが保証されていますか?
    または、ネットワーク接続なしで OOB 起動の可能性はありますか?

クライアントがネットワーク接続なしで OOB から起動する可能性がある場合は、オフライン データをディスクに保存する必要があります。起動時にサーバーから新しいデータを取得するオプションはありません。

  • オフライン モードの場合、ユーザーは以前に取得したデータを照会できますか?

これは、すべてのスマート クライアントに共通する 1 つのスレッドです。すべてのスマート クライアント アプリはオフライン データにアクセスできますが、これを機能 IMO として呼び出すことが重要です。

  • オフライン モードの場合、ユーザーは新しいデータを作成できますか?

では、購入アプリを持っていて、ネットワーク接続がない場合、ユーザーは新しい注文を作成できますか? その場合、このデータをローカルにキャッシュし、最初の Client<->Sync サイクルでサーバーに送信する必要があります。

  • オフラインで変更できるデータの範囲は?

重要なデータの作成だけにオフライン機能を制限できますか? それとも、すべてのデータをオフラインで作成、更新、および削除できるようにする必要がありますか?

私の提案は、オフラインでの変更を制限することです。そうしないと、非常に複雑なシナリオに直面して解決することになるからです。たとえば、午前 12 時にユーザー A が顧客 #1 を削除し、12:05 にユーザー B が顧客 #1 の新しい注文を発行したとします。両方のユーザーがオフラインでした。それでは、正しいビジネス ソリューションを見つけてください :)

編集:修正された例;)

  • オフライン モードで、ユーザーが以前に取得されていないデータをクエリするとどうなりますか?

共有データ (例えば、customers テーブル) が巨大であると仮定しましょう。1,000 万人の顧客がいます。その機密データをすべてのクライアントに保存することはできません。では、オフライン アプリが、持っていない Customer に対して余分なものを必要とする場合はどうなるでしょうか? エンドユーザーに「いまいましいネットワークに接続しますか?」と言って大丈夫ですか?

  • アプリのミッション クリティカル度は?

その質問の興味深い部分は、何か問題が発生した場合、そのユーザーをシャットダウンしても大丈夫ですか? この質問は、すべてのデータ アクション (新しいデータ、取得したデータ、フォーム変更フィールドなど) でディスクに永続化する必要があるかどうか、またはアプリが閉じている場合にのみディスクに永続化してよいかどうかを判断します。

Silverlight を見ると、優れた技術オプションがいくつかあります。

  1. データをメモリに保持します。
    機能セットが存続する場合は、RIA サービス ドメイン コンテキストを静的インスタンスとして保持します。
    クライアントがネットワーク接続を失った場合でも、RAM を使用して作業することができます。

  2. 前に述べたように、IsoStore はあなたの友達です。
    1MB (ブラウザー内) / 25MB (ブラウザー外) の独自の魔法のようなプライベート ディスク領域を取得できます。アプリでそれが必要な場合は、さらに要求することができます。
    データをディスクにシリアル化します。

  3. OODB - オブジェクト指向データベース。
    Silverlight IsoStore で実行される OODB は、データを永続化する驚くほど簡単な方法です。
    RIA Services Domain Conext に移動し、「myEntity.Save()」に移動します。
    私が知っている Silverlight IsoStore で実行されている 3 つの OODB があります: db40、mcObjects、SilverlightDB です。

数か月前の NikhilK のブログ投稿によると、RIA Services は「offlianability」のサポートを計画しています。ただし、スコープとタイムラインは指定されていません。

乾杯、
-- ジャスティン

于 2009-12-25T13:28:07.180 に答える
0

ローカル マシンにデータを保存するために使用される手法の 1 つは、「分離ストレージ」と呼ばれます。そこから始めることをお勧めします。

ビデオ #1 ビデオ #2

于 2009-12-25T12:33:54.863 に答える