多个客户的选择性更改通知(C#)

时间:2010-11-11 01:49:46

标签: c# delegates callback change-notification

我需要为具有一个管理器和多个使用者/客户端的系统实现通知机制。管理员应轮询数据库并在数据发生更改时触发事件。现在,如果所有客户都对相同的数据感兴趣,那么就很容易实现单个事件并为所有客户订阅该事件。但是,客户端只应接收他们负责的数据的事件。

例如,有多个客户端添加新客户。这通过管理器以线程安全的方式发生。现在,创建客户的这些客户端需要知道仅对这些客户发生的任何更改。经理每隔N秒轮询一次Customers表,并获取所有已更改客户的列表。然后,经理需要将通知“路由”(缺少一个更好的词)给感兴趣的客户。

这是否必须通过某种回调实现,每个客户都必须提供给管理员?这听起来像我需要的东西,但我不知道如何将参数传递给这个回调(这里,这些是我感兴趣的客户,当你有任何其他客户的更新时不要打扰我)

我正在使用C#,.NET 2.0。谢谢!

1 个答案:

答案 0 :(得分:2)

这是Observer pattern的一个很好的描述。通常,客户向管理者注册与其相关的一组数据的兴趣,提供通知方式(这将是您的回调)。如果客户不再对以前有用的数据感兴趣,则客户也可以取消注册。然后,经理的工作是将更改传播给所有感兴趣的Observers(即客户)。

在C#中,所需的基础架构可用作一流的语言功能 - 事件和委托。有很好的(如果简单的)示例代码here

在.Net 4中,这种便利性更进了一步,ObservableCollection<T>可用于自动化通知过程。

顺便说一下 - 如果可能的话,我会避免轮询数据库。您是否无法获得有关数据库中必要更改的通知?在C#/ SQL Server中,您可以使用SqlDependency