En una arquitectura controlada por eventos, cada componente solo actúa cuando se envía un evento a través del sistema.
Imagine un automóvil hipotético con un pedal de freno y una luz de freno.
- Las vueltas de luz de freno en cuando recibe una brake_on evento y apagado cuando recibe una brake_off evento.
- El pedal de freno envía un evento brake_on cuando se presiona hacia abajo y un evento brake_off cuando se suelta.
Todo esto está muy bien, hasta que tenga la situación en la que el automóvil se enciende con el pedal del freno presionado . Como la luz de freno nunca recibió un evento brake_on , permanecerá apagada, claramente una situación indeseable. Encender la luz de freno por defecto solo revierte la situación.
¿Qué podría hacerse para resolver este 'problema de estado inicial'?
EDITAR: Gracias por todas las respuestas. Mi pregunta no era sobre un auto real. En los automóviles resolvieron este problema enviando continuamente el estado, por lo tanto, no hay ningún problema de inicio en ese dominio. En mi dominio de software, esa solución usaría muchos ciclos de CPU innecesarios.
EDIT 2: además de la respuesta de @ gbjbaanb , voy por un sistema en el que:
- el hipotético pedal de freno, después de la inicialización, envía un evento con su estado, y
- la hipotética luz de freno, después de la inicialización, envía un evento solicitando un evento de estado desde el pedal del freno.
Con esta solución, no hay dependencias entre componentes, no hay condiciones de carrera, no hay colas de mensajes que se vuelvan obsoletas y no hay componentes 'maestros'.
initialize
) que contiene los datos necesarios del sensor.