質問

1人のマネージャーと複数の消費者/クライアントがいるシステムに通知メカニズムを実装する必要があります。マネージャーは、データベースに投票し、データに変更がある場合はイベントを起動する必要があります。これで、すべてのクライアントが同じデータに興味を持っている場合は簡単で、単一のイベントを実装してすべてのクライアントをそのイベントに購読するだけで十分です。ただし、クライアントは、責任を負うデータのイベントのみを受け取る必要があります。

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

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

C#、.NET 2.0を使用しています。ありがとう!

役に立ちましたか?

解決

これは良い説明です オブザーバーパターン. 。通常、クライアントは、それに関連するデータセットのマネージャーに関心を登録し、通知の手段を提供します(これはコールバックです)。以前に有用なデータに関心がなくなった場合、クライアントは登録解除も行うことがあります。その後、マネージャーの仕事は、関心のあるすべての人に変化を広めることです Observers (すなわちクライアント)。

C#では、必要なインフラストラクチャがファーストクラスの言語機能 - イベントと代表者として利用できます。良い(単純な場合)例コードがあります ここ.

.NET 4では、この利便性はさらに一歩進んでいます ObservableCollection<T> 通知プロセスを自動化するために利用できます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top