特定のデータをローカルに保存し、切断された場合にアクセスできる SL アプリを作成したいと考えています。サービス内のエンティティを公開し (dtos なし)、分離ストレージに保存できると思います。サービスは WCF ria サービスですが、SL アプリはどうでしょうか。「ローカルで切断されたキャッシュ モデル」を持つための最良の方法はどれですか?
前もって感謝し、メリークリスマス
特定のデータをローカルに保存し、切断された場合にアクセスできる SL アプリを作成したいと考えています。サービス内のエンティティを公開し (dtos なし)、分離ストレージに保存できると思います。サービスは WCF ria サービスですが、SL アプリはどうでしょうか。「ローカルで切断されたキャッシュ モデル」を持つための最良の方法はどれですか?
前もって感謝し、メリークリスマス
その質問に率直に答える人は、彼が何について話しているのかわかりません。
最大の課題の 1 つ (「開発者が実際に採用されている理由」を参照) は、切断されたクライアントを作成するのが難しいことです。
それほど難しくはありませんが、ソフトウェア エンジニアリングの経験と初期のトレードオフと計画が必要です。
あなたが尋ねた質問は、基本的に「スマート クライアントを構築するにはどうすればよいですか?」というものです。
このトピックについて書かれた素晴らしい本がたくさんあり、まさにこのトピックについて何十ものフレームワークが出荷されています。だから、私が言ったように、ここで簡単な答えはありません。
最初に自問する必要があるのは、どのレベルの Smart Client が必要かということです。
完全に切断されたクライアントを構築していますか? セミオンライン/オフラインのクライアントですか? 部分的に有効なオフライン クライアントですか? などなど
私が通常それを見る方法は、機能を通してです:
オフライン時間の長さ (より具体的には、アプリの再起動があるかどうか) によって、キャッシュがディスクに保存されるか、RAM に信頼できるかが決まります。
クライアントがネットワーク接続なしで OOB から起動する可能性がある場合は、オフライン データをディスクに保存する必要があります。起動時にサーバーから新しいデータを取得するオプションはありません。
これは、すべてのスマート クライアントに共通する 1 つのスレッドです。すべてのスマート クライアント アプリはオフライン データにアクセスできますが、これを機能 IMO として呼び出すことが重要です。
では、購入アプリを持っていて、ネットワーク接続がない場合、ユーザーは新しい注文を作成できますか? その場合、このデータをローカルにキャッシュし、最初の Client<->Sync サイクルでサーバーに送信する必要があります。
重要なデータの作成だけにオフライン機能を制限できますか? それとも、すべてのデータをオフラインで作成、更新、および削除できるようにする必要がありますか?
私の提案は、オフラインでの変更を制限することです。そうしないと、非常に複雑なシナリオに直面して解決することになるからです。たとえば、午前 12 時にユーザー A が顧客 #1 を削除し、12:05 にユーザー B が顧客 #1 の新しい注文を発行したとします。両方のユーザーがオフラインでした。それでは、正しいビジネス ソリューションを見つけてください :)
編集:修正された例;)
共有データ (例えば、customers テーブル) が巨大であると仮定しましょう。1,000 万人の顧客がいます。その機密データをすべてのクライアントに保存することはできません。では、オフライン アプリが、持っていない Customer に対して余分なものを必要とする場合はどうなるでしょうか? エンドユーザーに「いまいましいネットワークに接続しますか?」と言って大丈夫ですか?
その質問の興味深い部分は、何か問題が発生した場合、そのユーザーをシャットダウンしても大丈夫ですか? この質問は、すべてのデータ アクション (新しいデータ、取得したデータ、フォーム変更フィールドなど) でディスクに永続化する必要があるかどうか、またはアプリが閉じている場合にのみディスクに永続化してよいかどうかを判断します。
Silverlight を見ると、優れた技術オプションがいくつかあります。
データをメモリに保持します。
機能セットが存続する場合は、RIA サービス ドメイン コンテキストを静的インスタンスとして保持します。
クライアントがネットワーク接続を失った場合でも、RAM を使用して作業することができます。
前に述べたように、IsoStore はあなたの友達です。
1MB (ブラウザー内) / 25MB (ブラウザー外) の独自の魔法のようなプライベート ディスク領域を取得できます。アプリでそれが必要な場合は、さらに要求することができます。
データをディスクにシリアル化します。
OODB - オブジェクト指向データベース。
Silverlight IsoStore で実行される OODB は、データを永続化する驚くほど簡単な方法です。
RIA Services Domain Conext に移動し、「myEntity.Save()」に移動します。
私が知っている Silverlight IsoStore で実行されている 3 つの OODB があります: db40、mcObjects、SilverlightDB です。
数か月前の NikhilK のブログ投稿によると、RIA Services は「offlianability」のサポートを計画しています。ただし、スコープとタイムラインは指定されていません。
乾杯、
-- ジャスティン