Frage

Ich brauche einen Benachrichtigungsmechanismus für ein System zu implementieren, die einen Manager und mehrere Verbraucher / Kunden haben. Ein Manager soll eine Datenbank abfragen und ein Ereignis ausgelöst, wenn es Änderungen in den Daten sind. Nun würde es einfach sein, wenn alle Clients in den gleichen Daten interessiert sein würde, und es würde ausreichen, um ein einzelnes Ereignis zu implementieren und alle Clients auf dieses Ereignis abonnieren. Allerdings sollten Kunden erhalten nur die Ereignisse für die Daten für die sie verantwortlich sind.

Zum Beispiel gibt es mehrere Clients, die neue Kunden hinzu. Dies geschieht durch den Manager in einem Thread-sicher. Nun sind diese Kunden, die die Kunden erstellt wird, müssen alle Änderungen wissen, dass nur an Kunden geschehen. Der Manager fragt die Tabelle Kunden alle N Sekunden und erhält eine Liste aller Kunden geändert. Dann muss der Manager auf „Route“ (für einen Mangel eines besseren Wortes) die Mitteilungen an die interessierten Kunden.

Werden diese haben wird mit irgendeiner Art von einem Rückruf implementiert, dass jeder Kunde mit dem Manager zu versorgen hat? Das klingt wie etwas, was ich brauche, aber ich weiß nicht, wie ich Parameter für diesen Rückruf passieren kann (hier sind dies die Kunden Im in interessiert, Lassen Sie mich nicht stören, wenn Sie Updates für andere Kunden haben)

Im mit C #, .NET 2.0. Dank!

War es hilfreich?

Lösung

Dies ist eine gute Beschreibung des Observer Muster . Typischerweise registriert ein Client Interesse mit dem Manager für eine Reihe von Daten, die für sie relevant ist, ein Mittel zur Benachrichtigung bereitstellt (dies würde Ihr Rückruf sein). Ein Client auch austragen kann, wenn es kein Interesse mehr in zuvor Nutzdaten. Dann Job des Managers ist es, Veränderungen an alle interessierten Observers zu propagieren (d-Clients).

In C #, die erforderliche Infrastruktur ist als First-Class-Sprachfunktionen - Ereignisse und Personen. Es ist gut (wenn einfach) Beispielcode hier .

In .Net 4 dieser Komfort wird noch einen Schritt weiter mit ObservableCollection<T> verfügbar, um den Benachrichtigungsprozess.

Übrigens - würde ich Abfrage der Datenbank, wenn möglich vermeiden. Gibt es keine Möglichkeit, auf die notwendigen Veränderungen in Ihrem DB Benachrichtigung können? In C # / SQL Server können Sie verwenden SqlDependency .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top