25-11-2018, 12:30 PM
Hello,
Quand je développe avec des machines à états, je me pose souvent la question.
Dois-je gérer les cas d'erreur, ou bien laisser le client effectuer des tests (sur l'état de la machine) pour déclencher ou non des événements ?
Par exemple, imaginons une machine d'un jeu en groupe. La partie ne peut pas démarrer tant qu'il n'y a pas 3 joueurs.
La machine dans l'état "waiting_for_players" accepte les événements "player_joins", "player_leaves" et "start_game".
Si on déclenche l'événement "start_game", doit-elle exploser à la gueule de l'appelant, ou juste rester dans son état "waiting_for_players" ?
Même question pour les tests de "sécurité" : la machine dans l'état "wait_for_player_choices" doit-elle exploser quand elle reçoit un événement "player_uses_item" avec un objet qu'il ne possède pas, ou juste ne rien faire ?
Je répondrais à ces questions un peu plus tard pour ne pas orienter la discussion.
Quand je développe avec des machines à états, je me pose souvent la question.
Dois-je gérer les cas d'erreur, ou bien laisser le client effectuer des tests (sur l'état de la machine) pour déclencher ou non des événements ?
Par exemple, imaginons une machine d'un jeu en groupe. La partie ne peut pas démarrer tant qu'il n'y a pas 3 joueurs.
La machine dans l'état "waiting_for_players" accepte les événements "player_joins", "player_leaves" et "start_game".
Si on déclenche l'événement "start_game", doit-elle exploser à la gueule de l'appelant, ou juste rester dans son état "waiting_for_players" ?
Même question pour les tests de "sécurité" : la machine dans l'état "wait_for_player_choices" doit-elle exploser quand elle reçoit un événement "player_uses_item" avec un objet qu'il ne possède pas, ou juste ne rien faire ?
Je répondrais à ces questions un peu plus tard pour ne pas orienter la discussion.