2008-10-20 7 views
23

Tengo varias capas en una aplicación y me encuentro teniendo que pasar eventos a la capa de la GUI para hacer cambios en la barra de estado, etc. . Me encuentro teniendo que escribir códigos repetidos en los que cada capa simplemente se suscribe a los eventos de la capa inferior y luego en la devolución de llamada simplemente se genera un evento en la cadena. ¿Hay una manera más eficiente de hacer esto?Eventos de burbujeo.

Respuesta

29

Si todo lo que hace es disparar un controlador de eventos desde otro controlador de eventos, puede cortar al intermediario y enganchar los controladores de eventos directamente en los bloques de agregar/eliminar para el evento.

Por ejemplo, si usted tiene un control de usuario con un evento "SaveButtonClick", y todo lo que quiere hacer cuando es llamar al controlador de eventos cuando se hace clic en el "SaveButton" en su control de usuario, usted puede hacer esto:

public event EventHandler SaveButtonClick 
{ 
    add { this.SaveButton.Click += value; } 
    remove { this.SaveButton.Click -= value; } 
} 

Ahora no necesita ningún código para activar el evento SaveButtonClick: se activará automáticamente cuando se produzca el evento SaveButton.Click (es decir, cuando alguien haga clic en ese botón).

+0

Eso suena interesante. Me encantaría ver la implementación. –

+0

@Maxim - el código que publiqué allí * es * la implementación. Si tiene un UserControl con un botón llamado SaveButton y coloca ese UC en un formulario, puede suscribirse a SaveButtonClick desde el formulario, y cada vez que se haga clic en el botón se llamará a su controlador de eventos. –

+0

me gusta la idea y la implementación fácil. pero no me gusta la dependencia que usted crea entre el usuariocontrol y el suscriptor –

0

Puede tener un canal central que solo admita eventos. Este canal debe ser independiente, de modo que la capa solo publique o suscriba.

+1

Esto suena interesante, pero la explicación es muy vaga. ¿Puedes dar algunos ejemplos? – spoulson

1

A menos que vea un poco más del diseño ... será difícil dar una buena respuesta.

WPF realiza eventos de burbuja (automáticamente) el árbol de Componente/Control de UI ... esto ahora se ha incorporado en el marco. Así que supongo que esa es la manera recomendada :)

El problema con pasar por alto al intermediario Layer2 es que Layer1 y Layer3 ahora se conocen ... están acoplados. Entonces, es una compensación ... si está de acuerdo con el acoplamiento ... elimine al intermediario/invente un componente especializado con esta responsabilidad. Sin embargo, si espera que la capa 3 sea hot-swappable (bajo acoplamiento), yo diría que continúe burbujeando.

0

Eche un vistazo a Update Controls .NET. Estos controles descubren las partes de su modelo de datos de las que dependen incluso a través de capas de lógica empresarial. No es necesario que escriba ningún código para notificarlos.

3

Lea el blog de Jeremy Miller "The Shade Tree Developer", especialmente su Write Your Own CAB series - las cosas del patrón de comando de las que habla probablemente sean lo que necesita.

Cuestiones relacionadas