W architekturze sterowanej zdarzeniami każdy komponent działa tylko wtedy, gdy zdarzenie jest wysyłane przez system.
Wyobraź sobie hipotetyczny samochód z pedałem hamulca i światłem hamowania.
- Światło stop włącza się, gdy odbiera zdarzenie brak hamulca , i gaśnie, gdy odbiera zdarzenie brak hamulca .
- Pedał hamulca wysyła zdarzenie brake_on , gdy jest wciśnięty, i zdarzenie hamulca_off , gdy jest zwolnione.
Wszystko dobrze i dobrze, dopóki nie pojawi się sytuacja, w której samochód zostanie włączony, gdy pedał hamulca jest już wciśnięty . Ponieważ światło hamowania nigdy nie otrzymało zdarzenia brak_wyłączenia , pozostanie wyłączone - wyraźnie niepożądana sytuacja. Domyślne włączenie światła stopu tylko odwraca sytuację.
Co można zrobić, aby rozwiązać ten „problem stanu początkowego”?
EDYCJA: Dziękuję za wszystkie odpowiedzi. Moje pytanie nie dotyczyło prawdziwego samochodu. W samochodach rozwiązali ten problem poprzez ciągłe wysyłanie stanu - dlatego nie ma problemu z uruchomieniem w tej domenie. W mojej domenie oprogramowania to rozwiązanie wymagałoby wielu niepotrzebnych cykli procesora.
EDYCJA 2: Oprócz odpowiedzi @ gbjbaanb idę na system, w którym:
- hipotetyczny pedał hamulca, po inicjalizacji, wysyła zdarzenie ze swoim stanem, oraz
- hipotetyczne światło stopu po inicjalizacji wysyła zdarzenie żądające zdarzenia stanu z pedału hamulca.
Dzięki temu rozwiązaniu nie ma zależności między komponentami, żadnych warunków wyścigu, żadnych kolejek komunikatów, które mogłyby się zestarzeć, ani żadnych komponentów „wzorcowych”.
initialize
), które zawiera potrzebne dane z czujnika.