Question

Je dois mettre en place un mécanisme de notification pour un système qui a un gestionnaire et plusieurs consommateurs / clients. Un gestionnaire doit interroger une base de données et déclencher un événement chaque fois qu'il ya des changements dans les données. Maintenant, ce serait facile si tous les clients seraient intéressés par les mêmes données, et il serait suffisant pour mettre en œuvre un événement unique et abonnez-vous tous les clients à cet événement. Toutefois, les clients ne devraient recevoir les événements pour les données dont ils sont responsables.

Par exemple, il y a plusieurs clients qui ajoutent de nouveaux clients. Cela se produit par le gestionnaire d'une manière thread-safe. Maintenant, ces clients qui ont créé les clients ont besoin de connaître les changements qui se produisent uniquement aux clients. Le gestionnaire interroge la table Customers toutes les N secondes et obtient une liste de tous les clients qui ont changé. Ensuite, le gestionnaire devra « route » (pour un manque d'un meilleur mot) les notifications aux clients intéressés.

Est-ce que cela a à être mis en œuvre avec une sorte de rappel que chaque client devra fournir au gestionnaire? Cela ressemble à quelque chose que je besoin, mais je ne sais pas comment je peux passer des paramètres à ce rappel (ici, ce sont les clients Im intéressés, Ne me dérange pas quand vous avez des mises à jour pour tout autre client)

Im en utilisant C #, .NET 2.0. Merci!

Était-ce utile?

La solution

Ceci est une bonne description du motif Observateur . En général, un client enregistre un intérêt avec le gestionnaire pour un ensemble de données pertinentes pour cela, fournir un moyen de notification (ce serait votre rappel). Un client peut également annuler l'inscription si elle est plus intéressé des données précédemment utiles. Ensuite, le travail du gestionnaire est de propager les modifications à tous Observers intéressés (à savoir les clients).

En C #, l'infrastructure nécessaire est disponible en fonctionnalités du langage de première classe - les événements et les délégués. Il est bon (si simple,) exemple de code .

Net 4 cette commodité, on effectue un peu plus loin avec ObservableCollection<T> disponible pour automatiser le processus de notification.

Par ailleurs - j'éviter la base de données si possible vote. Y at-il aucun moyen que vous pouvez être averti sur les changements nécessaires dans votre base de données? En C # / SQL Server, vous pouvez utiliser SqlDependency .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top