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
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).
Puede tener un canal central que solo admita eventos. Este canal debe ser independiente, de modo que la capa solo publique o suscriba.
Esto suena interesante, pero la explicación es muy vaga. ¿Puedes dar algunos ejemplos? – spoulson
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.
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.
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.
Peter Rilling ha publicado una forma de simular eventos de burbujeo/emisión en winforms. Es simple y efectivo.
- 1. Burbujeo de eventos y Propagación de detención
- 2. Burbujeo/captura de eventos: ¿dónde comienza/finaliza?
- 3. ¿Ejemplos de usos comunes y prácticos de eventos de burbujeo y captura?
- 4. ¿Cómo cancelo el evento burbujeo en ASP.net?
- 5. Captura de eventos vs Burbujas de eventos
- 6. Detectores de eventos registrados para capturar fase no activada antes del burbujeo, ¿por qué?
- 7. Detener un evento de burbujeo en GWT
- 8. Detener jQuery Evento de deslizamiento móvil doble burbujeo
- 9. ¿Cómo funcionan exactamente los eventos de jQuery Custom?
- 10. javascript: Cómo depurar eventos de teclado
- 11. jQuery evento burbujeo en el botón no funciona como se esperaba en Firefox
- 12. Evento no burbujeo en algunos navegadores cuando se hace clic en flash
- 13. Consumir eventos "Seguimiento de eventos para Windows"
- 14. Eventos de propagación de eventos, superposición y arrastrar y colocar
- 15. WPF: eventos enrutados o eventos regulares?
- 16. Span dentro de ancla con la propagación de eventos
- 17. Symfony2 detector de eventos
- 18. C# Controladores de eventos
- 19. Escuchas de eventos NHibernate
- 20. Versiones de eventos CQRS
- 21. Prueba de eventos socket.io
- 22. Eventos de Spring Framework
- 23. Repetición de "Eventos" (Calendario)
- 24. Cómo inyectar manejadores de eventos en eventos con Unity
- 25. ¿Manejo de eventos jQuery para desmarcar() y desvincular() eventos?
- 26. JavaScript mapping eventos táctiles a eventos de mouse
- 27. Calendario de Google: muestra eventos recurrentes, como eventos normales
- 28. Serializar eventos
- 29. eventos Backbone
- 30. Eventos UiTextField
Eso suena interesante. Me encantaría ver la implementación. –
@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. –
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 –