0

我需要为具有一个经理和多个消费者/客户的系统实现通知机制。每当数据发生变化时,经理应该轮询数据库并触发事件。现在,如果所有客户端都对相同的数据感兴趣,那将很容易,并且实现单个事件并为所有客户端订阅该事件就足够了。但是,客户端应该只接收他们负责的数据的事件。

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

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

我使用 C#、.NET 2.0。谢谢!

4

1 回答 1

2

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

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

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

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

于 2010-11-11T01:55:29.923 回答