¿Cuáles son los síntomas en una base de código que indican que se requiere un enfoque de escucha de eventos?
Me parece que cuando hay clases que necesitan ser llamadas por múltiples, no definidas en el conjunto de otras clases en tiempo de diseño, necesita algún tipo de marco de señalización, pero me gustaría saber qué otras situaciones hay. mejorado al cambiar a un modelo basado en eventos.
fuente
Cuando no puede o no debe saber qué debe reaccionar ante un conjunto de mensajes / señales / eventos.
A menudo es cuando quieres que "el mundo" sepa sobre algo que sucede en un módulo (una clase o un sistema de clases) pero no quieres preocuparte por lo que se llama.
El olor del código asociado, para ser específicos, es cuando sientes que comienzas a mezclar código de módulos independientes, uno haciendo algo a lo que el otro debería reaccionar. Una vez que vea que tiene que llamar al código desde el módulo B dependiendo del estado / eventos del módulo A, necesita oyentes de eventos.
fuente
Cambiaría su pregunta y diría: ¿cuándo un evento basado no es la solución correcta para una aplicación orientada a objetos? Creo que la mayoría de las aplicaciones OO pueden beneficiarse si están diseñadas como productores y consumidores de eventos.
Al final, una "llamada al método" es, de hecho, un mensaje que llega a un objeto y el objeto es responsable de decidir si va a hacer algo con el mensaje y realizar la operación. Esto no está muy claro en lenguajes fuertemente tipados como Java, pero se vuelve más obvio en lenguajes dinámicos como Ruby.
Otro punto interesante del diseño de una aplicación basada en eventos es que, por lo general, los componentes internos deben aislarse y ser coherentes, de lo contrario el código se convierte en un desastre muy, muy rápidamente. Como ejemplo, me gusta mucho el concepto de Arquitectura Hexagonal utilizado por Alistair Cockburn, ya que generalmente este patrón crea una mejor encapsulación y fuerza (en mi opinión) componentes más cohesivos.
Creo (pero probablemente me equivoque) que esto también está relacionado con el concepto de diseño impulsado por dominio de eventos de dominio , en el que las clases de dominio emiten eventos que son capturados por otros objetos, y estos objetos emiten otros eventos (puede ver dónde esto va: D). Lo que me gusta de este patrón es que dice que las interfaces deben modelar roles, no implementaciones.
Lo siento si no tengo mucho sentido, he estado experimentando con estos patrones durante los últimos meses con resultados sorprendentes, pero todavía estoy tratando de entender los conceptos y hasta dónde llegan.
fuente
Piensa en lo que tendrías que hacer si los oyentes de eventos (también conocido como el Patrón de Observador) no existieran.
Si tiene un objeto que tiene referencias a una lista de otros objetos y llama a un método en un punto dado del proceso, definitivamente debería haber tenido un evento allí.
Si tiene una bandera en un objeto para decir que se ha hecho algo y está mirando esa bandera desde otros objetos, definitivamente debería haber usado un modelo basado en eventos.
Sin embargo, no confunda esto con una devolución de llamada. Si llama a un método en otro objeto y le pasa un método en el objeto de origen al que volver a llamar en un momento dado, debe dejarlo así, en lugar de utilizar un detector de eventos.
fuente