4

顧客向けの会計システムを開発しています。このアプリケーションには、いくつかの特別な要件があります。アカウントに固有の会計システムの詳細を残します。私を混乱させている点について言及します。

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

たとえば、あるユーザーが在庫品目を入力すると、別のユーザーもその時点で同じ品目を入力する可能性があります。アプリケーションは正しい情報を検証できる必要があり、ユーザーが複製することを禁止します。

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

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

私は C# Dot Net を使用しており、このアプリケーションには .NET Remoting または WCF または ASP.NET MVC を使用するつもりであることに注意してください。

あらゆる種類の助けをいただければ幸いです。ありがとう。

4

4 に答える 4

2

Tim McCarthy の著書「C# を使用した .NET Domain-Driven Design: Problem - Design - Solution」では、同様の要件を持つシステムを設計および実装しています。少し古いですが、良い方向に向かうと思います。(5 ページを見てください。彼は、この本が設計しているシステムの要件をリストしています。それらはあなたのものと似ています。)

彼は、C#、WCF、Microsoft の Sync Framework、スマート クライアントなどを使用しています。彼は、本が印刷された時点では Entity Framework は Visual Studio で利用できなかったので、独自の Entity Framework を作成したと述べています (これは問題ありませんが、EF を含めることができれば、本ははるかに優れていたと思います)。

それが役立つことを願っています!

于 2012-05-25T15:12:36.817 に答える
-1

このリンクオンライン/オフラインブラウザを検出する方法...ブラウザのオンライン/オフラインステータスを確認して、接続文字列を切り替えることができる場合があります。残りは通常のアプリケーションとして開発できます。

オンラインモードとオフラインモードを切り替える最も簡単な方法として、接続文字列を変更することを検討しています。ただし、同期に対処する必要があります。

于 2012-05-25T14:57:22.597 に答える
-1

概要:

  • サーバー側の WCF
  • あらゆるデータベースとクライアント フレームワークに対応
  • クライアントはローカル データベースで動作し、新しいデータを同期して編集権限を取得するためのバックグラウンド プロセスがあります。
  • サーバーのビジネス ロジック レベルは競合を制御し、(自動的に) またはクライアントに通知することによって解決します。
  • データベース レベルで競合を解決したほうがよい状況はほとんどありません。

完全な答え

エキゾチックなアドオンの必要性は本当にありません。

私が見るように、サーバー側の同期を使用してクライアント側のアプリケーションを構築しています。WCF は非常に良い選択であり、たとえそれが win8 メトロ アプリケーションであっても、どのようなアプリケーション フレームワークを使用しても問題ありません)

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

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

ユーザーがローカル データベースを直接操作できるようにし、サーバー同期に非同期要求を使用することをお勧めします。その後、アプリケーションはよりスムーズに実行され、迷惑なラグはなくなります。

したがって、アプリケーションには 2 つのビジネス ロジック部分があります。1 つはユーザーとやり取りしてデータを保存し、もう 1 つはすべてのデータをバックグラウンドで同期します。

データの競合はどうですか? このような競合を解決する最善の方法は、サーバーのビジネス ロジック レベルで解決することだと思います。データベース レベルで競合を解決したほうがよい状況はほとんどありません。

于 2012-04-23T07:53:35.737 に答える