我需要为具有一个经理和多个消费者/客户的系统实施通知机制。经理应在数据发生更改时对数据库进行轮询并开除事件。现在,如果所有客户端都对相同的数据感兴趣,这将很容易,并且足以实施单个事件并订阅所有客户端。但是,客户只应收到负责数据的事件。

例如,有多个客户添加新客户。这是通过经理以线程安全的方式发生的。现在,这些创建客户的客户需要知道仅对这些客户发生的任何更改。经理每秒钟对客户进行调查,并获取所有更改的客户的列表。然后,经理将需要“路由”(对于缺乏更好的词),给感兴趣的客户的通知。

是否必须使用每个客户必须向经理提供的回调来实现这一点?这听起来像我需要的东西,但是我不知道如何将参数传递给此回调(在这里,这些客户对我感兴趣,当您为任何其他客户提供更新时,请不要打扰我)

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

有帮助吗?

解决方案

这是对 观察者模式. 。通常,客户端向经理注册利息,以获取一组与其相关的数据,提供通知手段(这是您的回调)。如果客户不再对以前使用的数据感兴趣,也可能会取消注册。然后,经理的工作是向所有有兴趣的人传播更改 Observers (即客户)。

在C#中,所需的基础架构可作为一流的语言功能 - 事件和代表。有好(如果简单)示例代码 这里.

在.NET 4中,此便利是进一步的 ObservableCollection<T> 可用于自动化通知过程。

顺便说一句 - 如果可能的话,我会避免对数据库进行轮询。您无法通过DB的必要更改通知您吗?在C#/SQL Server中,您可以使用 sqldependenty.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top