Выборочное уведомление об изменении для нескольких клиентов (C #) - PullRequest
0 голосов
/ 11 ноября 2010

Мне нужно реализовать механизм уведомлений для системы, в которой есть один менеджер и несколько потребителей / клиентов.Менеджер должен опросить базу данных и инициировать событие всякий раз, когда происходят изменения в данных.Теперь было бы легко, если бы все клиенты были заинтересованы в одних и тех же данных, и было бы достаточно реализовать одно событие и подписать всех клиентов на это событие.Однако клиенты должны получать события только для тех данных, за которые они отвечают.

Например, есть несколько клиентов, которые добавляют новых клиентов.Это происходит через менеджер потокобезопасным способом.Теперь эти клиенты, которые создали клиентов, должны знать о любых изменениях, которые происходят только с этими клиентами.Менеджер опрашивает таблицу «Клиенты» каждые N секунд и получает список всех клиентов, которые изменились.Затем менеджеру нужно будет «направить» (из-за отсутствия лучшего слова) уведомления заинтересованным клиентам.

Должно ли это быть реализовано с помощью своего рода обратного вызова, который каждый клиент должен будет выполнитьпоставлять менеджеру?Это звучит как то, что мне нужно, но я не знаю, как передать параметры этому обратному вызову (здесь это клиенты, которые меня интересуют, не беспокойте меня, когда у вас есть обновления для любого другого клиента)

Я используюC #, .NET 2.0.Спасибо!

1 Ответ

2 голосов
/ 11 ноября 2010

Это хорошее описание шаблона Observer . Как правило, клиент регистрирует интерес у менеджера для набора данных, которые имеют к нему отношение, предоставляя средства уведомления (это будет ваш обратный вызов). Клиент также может отменить регистрацию, если он больше не интересуется ранее полезными данными. Затем работа менеджера заключается в распространении изменений среди всех заинтересованных Observers (т.е. клиентов).

В C # необходимая инфраструктура доступна в виде первоклассных языковых функций - событий и делегатов. Вот хороший (если простой) пример кода здесь .

В .Net 4 это удобство пошло еще дальше с ObservableCollection<T>, доступным для автоматизации процесса уведомления.

Кстати - я бы не стал опрашивать базу данных, если это возможно. Нет ли способа получить уведомление о необходимых изменениях в вашей БД? В C # / SQL Server вы можете использовать SqlDependency .

...