Domanda

Ho bisogno di implementare un meccanismo di notifica per un sistema che ha un manager e più consumatori / clienti. Un manager deve interrogare un database e generare un evento ogni volta che ci sono cambiamenti nei dati. Ora, sarebbe facile se tutti i clienti sarebbero interessati agli stessi dati, e sarebbe sufficiente per attuare un singolo evento e sottoscrivere tutti i clienti a quell'evento. Tuttavia, i clienti dovrebbero ricevere solo gli eventi per i dati di cui sono responsabili.

Per esempio, ci sono più client che aggiungono nuovi clienti. Ciò avviene attraverso il gestore in modo thread-safe. Ora, questi clienti che hanno creato i clienti hanno bisogno di sapere di eventuali cambiamenti che accadono solo a quei clienti. Il manager sondaggi tabella clienti ogni n secondi e ottiene un elenco di tutti i clienti che ha cambiato. Poi, il manager avrà bisogno di "route" (per mancanza di una parola migliore) le notifiche ai clienti interessati.

Sarà questo devono essere implementati con una sorta di un callback che ogni cliente dovrà fornire al gestore? Questo suona come qualcosa di cui ho bisogno, ma non so come posso passare parametri a questo callback (qui, questi sono i clienti Sono interessato all'articolo, non perdete tempo con quando avete aggiornamenti per qualsiasi altro cliente)

Im using C #, .NET 2.0. Grazie!

È stato utile?

Soluzione

Questa è una descrizione bene della Observer modello . In genere un client registra interesse con il manager per un insieme di dati rilevanti per esso, fornendo un mezzo di comunicazione (questo sarebbe il callback). Un client può anche annullare la registrazione se è più interessato a dati precedentemente-utili. Poi il lavoro del manager è quello di propagare le modifiche a tutti Observers interessati (cioè client).

In C #, l'infrastruttura necessaria è disponibile come funzionalità di linguaggio di prima classe - Eventi e delegati. Ci sono buone (se semplice) esempio di codice qui .

In .Net 4 questa convenienza è preso un ulteriore passo avanti con ObservableCollection<T> a disposizione per automatizzare il processo di notifica.

Tra l'altro - vorrei evitare di polling del database, se possibile. Non c'è modo è possibile ottenere una notifica sui cambiamenti necessari nel vostro DB? In C # / SQL Server è possibile utilizzare SqlDependency .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top