Pregunta

Me necesidad de implementar un mecanismo de notificación para un sistema que tiene un gerente y múltiples consumidores / clientes. Un gerente debe sondear una base de datos y desencadenar un evento cada vez que se producen cambios en los datos. Ahora, sería fácil si todos los clientes estarían interesados ??en los mismos datos, y sería suficiente para poner en práctica un solo evento y suscribirse a todos los clientes a ese evento. Sin embargo, los clientes sólo deben recibir los eventos para los datos de los que son responsables.

Por ejemplo, hay varios clientes que se añadan nuevos clientes. Esto sucede a través del gestor de una manera segura para los subprocesos. Ahora, estos clientes que crearon los clientes necesitan saber de cualquier cambio que se producen sólo a los clientes. Las encuestas gestor de la tabla de clientes cada N segundos y obtiene una lista de todos los clientes que cambió. A continuación, el administrador tendrá que "ruta" (por falta de una palabra mejor) las notificaciones a los clientes interesados.

¿Esto tiene que ser implementado con algún tipo de una devolución de llamada que cada cliente tendrá que suministrar al gestor? Esto suena como algo que necesito, pero no sé cómo puedo pasar parámetros a esta devolución de llamada (en este caso, se trata de los clientes interesados ??en Im, No me molesta cuando tiene versiones de cualquier otro cliente)

Im usando C #, .NET 2.0. Gracias!

¿Fue útil?

Solución

Esta es una descripción bien de la Observador patrón . Normalmente, un cliente se registra el interés con el gerente para un conjunto de datos que son relevantes para él, proporcionando un medio de notificación (esto sería su devolución de llamada). Un cliente puede también anular el registro si está ya no está interesado en los datos previamente-útiles. A continuación, el trabajo del gerente es propagar los cambios a todos los interesados ??Observers (es decir, clientes).

En C #, la infraestructura necesaria está disponible como las características del lenguaje de primera clase - eventos y delegados. No es buena (aunque sencillo) código de ejemplo aquí .

En .Net 4 esta conveniencia se toma un paso más con ObservableCollection<T> disponible para automatizar el proceso de notificación.

Por cierto - evitaría la base de datos de votación, si es posible. ¿No hay manera que usted puede recibir una notificación sobre los cambios necesarios en su base de datos? En C # / SQL Server, puede utilizar SqlDependency .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top