2012-04-22 4 views
4

私は顧客の会計システムを開発しています。このアプリケーションには特別な要件があります。私はアカウントに特有の会計システムの詳細を残します。私は私を混乱させるそれらの点を言及する。オフライン+オンラインデータベースアプリケーション

アプリケーションは、オンライン環境とオフライン環境で動作するはずです。ユーザーが作業していて突然アプリケーションがオフラインになった場合ユーザーはオフラインで作業できるはずです。すべてのオフライン作業はローカルデータベースに保存され、アプリケーションがインターネットに接続するときに次回に中央データベースに同期します。このアプリケーションには多くのユーザーがおり、すべて同じ情報で同時に動作します。

例ユーザが在庫アイテムを入力した場合、その時点で別のユーザも同じアイテムを入力する可能性があります。アプリケーションは、正しい情報を検証でき、ユーザーに複製を禁止する必要があります。

ユーザーローカルデータベースは、他のユーザーが作業しているかどうか常に更新する必要があります。他のユーザーが作業している場合は、更新されたすべての情報をローカルデータベースで利用できるようにして、ユーザーがオフラインになったときにすべての情報が更新されるようにします。

質問はこの種のアプリケーションを開発する方法ですか?この目標を達成するための標準的な方法はありますか?この種のソフトウェアを構築するための標準または非標準のパターンはありますか?

注:このアプリケーションで.NET RemotingまたはWCFまたはASP.NET MVCを使用するには、C#Dot NetおよびIntendを使用しています。

何か助けていただければ幸いです。おかげさまで

答えて

2

Tim McCarthyの本.NET Domain-Driven Design with C#: Problem - Design - Solutionは、同様の要件を備えたシステムを設計し、実装しています。少し古いですが、私はあなたを良い方向に向けると思います。 (5ページを参照してください。彼は本の設計に必要なシステム要件を記載していますが、あなたのものと似ています)。

彼はC#、WCF、MicrosoftのSync Framework、Smart Clientなどを使用しています。彼は書籍の印刷の時点で、Entity FrameworkはVisual Studioで利用できなかったので、彼は独自のものを作成しています(これは問題ありませんが、EFを含めることができればもっとうまくいったと思います)。

私はそれが助けてくれることを願っています!

-1

概要:サーバー側

  • ため

    • WCF任意のデータベースとクライアントフレームワークが
    • クライアントを行ってもいいRは、ローカル・データベースと連携し、バックグラウンド・プロセスは、新しいデータを同期して編集を取得することがありますパーミッション。
    • サーバービジネスロジックレベルは、競合を制御し、自動的に解決するか、クライアントに通知します。
    • データベースレベルの競合を解決する方が良い場合はほとんどありません。

    全解答

    は本当に任意のエキゾチックなアドオンで任意の必要性を参照してくださいいけません。

    私は、サーバー側の同期でクライアント側のアプリケーションを構築することを見ています。 WCFは非常に良い選択であり、アプリケーションフレームワークはwin8メトロアプリケーションであってもOKです。

    もちろん、2つのデータベースクライアント側とサーバー側があります。 Uは、アプリケーションの最適なニーズを満たすデータベースを選択できます。異なるサーバー側とクライアント側のデータベースになる可能性があります。

    クライアントは、サーバーから情報を取得し、WCF APIを使用してサーバーに新しいデータ(およびデータ変更要求)を送信します。

    ローカルデータベースで直接作業し、サーバー同期のための非同期要求を使用するようにユーザーを設定することをお勧めします。その後、URアプリケーションはより円滑に実行され、迷惑なラグは発生しません。

    したがって、アプリケーションの2つのビジネスロジック部分があります。ユーザと対話するユーザはデータを与え、保存し、他のユーザはすべてのデータをバックグラウンドで同期させる。

    データの競合はどうなりますか?私はそのような競合を解決する最善の方法はあまりにもURサーバーのビジネスロジックレベルでそれらを解決していると思います。データベースレベルでの競合を解決する方が良い場合はほとんどありません。

  • +0

    詳細な回答ありがとうございますが、このアプリケーションの構築方法を知りたいですか?どのようなパターンが使用されていますか?アプリケーションのサンプルがありますか?基本的には、この種のアプリケーションを構築する前にアイデアを得たいと思います。 –

    +0

    WCFベースのクライアントアプリケーションまたはサーバー側のモバイルアプリケーションを見てください。主なアイデアは非常にシンプルで、悪魔は詳細です。 –

    +0

    どのような例を教えてもらえますか? –

    -1

    このリンクHow to detect online/offline browser...は、ブラウザのオンライン/オフライン状態を確認して接続文字列を切り替えるのに役立ちます。物事の残りの部分は、通常のアプリケーションとして開発することができます。

    私は、接続文字列をオンラインモードとオフラインモードの間で切り替える最も簡単な方法を検討しています。しかし、その後、同期を処理する必要があります。

    0

    私はあなたのために2つの答えを持っています。 Web APIまたはServicestackをバックエンドに使用しており、クライアント側でupshotjsとともにHTML5を使用している場合。それはあなたのためにブラウザにデータを格納します。

    しかし、重要なアカウントタイプのものについては、リッチクライアントタイプのアプリケーションを使用します。バックエンドは同じですが、今は2つのデータベース、1つはサーバー上、もう1つはクライアント上にあります。ユーザーはクライアントに詳細を入力しますが、そのデータはサーバーと同期します。このため、NoSQLオプションもチェックできます。

    さらに詳しい情報が必要な場合は教えてください。