Dans une architecture pilotée par les événements, chaque composant agit uniquement lorsqu'un événement est envoyé via le système.
Imaginez une voiture hypothétique avec une pédale de frein et un feu stop.
- Les tours de lumière de frein sur quand il reçoit un brake_on événement, et au large quand il reçoit un brake_off événement.
- La pédale de frein envoie un événement brake_on lorsqu'elle est enfoncée et un événement brake_off lorsqu'elle est relâchée.
C’est très bien jusqu’à ce que la voiture soit allumée avec la pédale de frein déjà enfoncée . Puisque le feu stop n'a jamais reçu d' événement de freinage , il restera éteint - ce qui est clairement une situation indésirable. Allumer le feu stop par défaut ne fait que renverser la situation.
Que pourrait-on faire pour résoudre ce "problème d'état initial"?
EDIT: Merci pour toutes les réponses. Ma question ne concernait pas une voiture réelle. Dans les voitures, ils ont résolu ce problème en envoyant en permanence l'état. Par conséquent, il n'y a pas de problème de démarrage dans ce domaine. Dans mon domaine logiciel, cette solution utiliserait de nombreux cycles de calcul inutiles.
EDIT 2: En plus de la réponse de @ gbjbaanb , je choisis un système dans lequel:
- la pédale de frein hypothétique, après l’initialisation, envoie un événement avec son état, et
- le feu de freinage hypothétique, après l'initialisation, envoie un événement demandant un événement d'état à la pédale de frein.
Avec cette solution, il n'y a pas de dépendances entre les composants, pas de conditions de concurrence, pas de files de messages à vider et pas de composants "maîtres".
initialize
) contenant les données de capteur nécessaires.