In einer ereignisgesteuerten Architektur handelt jede Komponente nur, wenn ein Ereignis durch das System gesendet wird.
Stellen Sie sich ein hypothetisches Auto mit einem Bremspedal und einem Bremslicht vor.
- Der Bremslicht Windungen auf , wenn er ein brake_on Ereignis und ausgeschaltet , wenn er ein brake_off Ereignis.
- Das Bremspedal sendet ein brake_on- Ereignis, wenn es gedrückt wird, und ein brake_off- Ereignis, wenn es freigegeben wird.
Das ist alles in Ordnung und gut, bis Sie die Situation haben, in der das Auto mit bereits durchgetretenem Bremspedal eingeschaltet ist . Da die Bremsleuchte niemals ein brake_on- Ereignis empfangen hat, bleibt sie ausgeschaltet - eindeutig eine unerwünschte Situation. Wenn Sie das Bremslicht standardmäßig einschalten, wird die Situation nur umgekehrt.
Was könnte getan werden, um dieses Problem des Anfangszustands zu lösen?
EDIT: Vielen Dank für alle Antworten. Meine Frage war nicht über ein tatsächliches Auto. In Autos lösten sie dieses Problem, indem sie kontinuierlich den Status sendeten - daher gibt es in dieser Domäne kein Startproblem. In meiner Softwaredomäne würde diese Lösung viele unnötige CPU-Zyklen verwenden.
EDIT 2: Zusätzlich zur Antwort von @ gbjbaanb werde ich ein System verwenden, in dem:
- das hypothetische Bremspedal, nach der Initialisierung sendet ein Ereignis mit seinem Zustand, und
- Das hypothetische Bremslicht sendet nach der Initialisierung ein Ereignis, das ein Zustandsereignis vom Bremspedal anfordert.
Mit dieser Lösung gibt es keine Abhängigkeiten zwischen Komponenten, keine Rennbedingungen, keine veralteten Nachrichtenwarteschlangen und keine Hauptkomponenten.
initialize
) zu generieren, das die benötigten Sensordaten enthält.