0

1人のマネージャーと複数のコンシューマー/クライアントを持つシステムに通知メカニズムを実装する必要があります。管理者はデータベースをポーリングし、データに変更があるたびにイベントを発生させる必要があります。これで、すべてのクライアントが同じデータに関心を持っていれば簡単であり、単一のイベントを実装して、すべてのクライアントをそのイベントにサブスクライブするだけで十分です。ただし、クライアントは、担当するデータのイベントのみを受信する必要があります。

たとえば、新しい顧客を追加する複数のクライアントがあります。これは、スレッドセーフな方法でマネージャーを介して行われます。ここで、顧客を作成したこれらのクライアントは、それらの顧客にのみ発生する変更を知る必要があります。マネージャーはN秒ごとにCustomersテーブルをポーリングし、変更されたすべての顧客のリストを取得します。次に、マネージャーは、関心のあるクライアントに通知を「ルーティング」する必要があります(より適切な言葉がないため)。

これは、各クライアントがマネージャーに提供する必要があるある種のコールバックを使用して実装する必要がありますか?これは私が必要としているもののように聞こえますが、このコールバックにパラメーターを渡す方法がわかりません(ここでは、これらは私が興味を持っている顧客です。他の顧客の更新がある場合は気にしないでください)

私はC#、.NET2.0を使用しています。ありがとう!

4

1 に答える 1

2

これは、オブザーバーパターンの適切な説明です。通常、クライアントは、それに関連する一連のデータについてマネージャーに関心を登録し、通知の手段を提供します(これがコールバックになります)。クライアントは、以前に使用されていたデータに関心がなくなった場合にも登録を解除できます。Observers次に、マネージャーの仕事は、関心のあるすべての人(つまりクライアント)に変更を伝達することです。

C#では、必要なインフラストラクチャは、ファーストクラスの言語機能(イベントとデリゲート)として利用できます。ここに良い(単純な場合)サンプルコードがあります

.Net 4では、この便利さがさらに一歩進んでObservableCollection<T>、通知プロセスを自動化できるようになっています。

ちなみに、可能であればデータベースのポーリングは避けたいと思います。DBに必要な変更について通知を受け取る方法はありませんか?C#/ SQL Serverでは、 SqlDependencyを使用できます。

于 2010-11-11T01:55:29.923 に答える