États et machines à états

Utilisation de machines à états pour définir des comportements et des transitions d’états – expliqué avec les applications de rencontres

(20 décembre 2020)

Quest-ce quun état?

En technologie de linformation et en informatique, un système est décrit comme stateful sil est conçu pour se souvenir des événements précédents ou des interactions de lutilisateur; les informations mémorisées sont appelées état du système .

Les états dun système sont souvent définis par lagrégation des comportements de ses utilisateurs. Les états sont importants car il sagit dun moyen plus systématique de vérifier si certains comportements à certains états sont valides ou non.

États dun feu de signalisation

Prenons un feu de signalisation comme exemple. Sil était vert, les conducteurs et les passagers sattendent à voir ensuite du jaune – et non du rouge. Quand il vire au jaune, ils sattendent à du rouge et non au vert. Les états ici sont donc simples:

Green -> Yellow -> Red
^ |
|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|

Suivez les flèches (cest-à-dire les transitions détats autorisées) et votre feu est prêt à partir.

États des correspondances dans les applications de rencontres

Prenons maintenant une application de rencontres comme un exemple plus compliqué, imaginons que nous construisons une application pour que les gens «correspondent» en ligne. Disons que nous avons les algorithmes prêts et que nous devons commencer à écrire les logiques derrière les correspondances qui apparaissent sur les applications de nos utilisateurs.

Définissons une entité match dabord pour représenter le match entre deux personnes. Il y a plusieurs états pour une correspondance que nous devrions prendre en considération si nous devions la concevoir.

Nous avons besoin des états pour que les gens ne voient pas des comportements inattendus tels quune personne aléatoire et non correspondante apparaître sur lécran en disant bonjour.

Photo de Yogas Design sur Unsplash

Ma réflexion:

  1. Tout dabord, une correspondance doit être créée , ce qui signifie quun certain ensemble dalgorithmes a pour sélectionner deux personnes prêtes pour un match. Bien sûr, les algorithmes doivent sassurer au préalable quils sont tous les deux prêts pour une correspondance, quils correspondent aux préférences de lautre, quils ne sont pas interdits, etc.
  2. Ensuite, cette correspondance pourrait devenir soit en attente (en attente du balayage dune autre personne) ou a échoué en fonction de laction du premier utilisateur. Si lutilisateur glisse vers la droite (ce qui signifie « Je taime » dans les termes des applications de rencontres), létat passe de created à en attente . Si lutilisateur glisse vers la gauche (ce qui signifie « Je ne taime pas »), létat passe à a échoué .
  3. Ensuite, si les deux personnes saiment, cela passe de en attente à correspondait à .
  4. Lune ou lautre des personnes dans une correspondance pouvait également «annuler la correspondance» dune correspondance, amenant létat à inégalé .
  5. Je pense avoir couvert tous les changements détats. Mais est-ce tout? Hmm… ny a-t-il pas une fonctionnalité payante appelée « rembobinage » qui vous permet de revenir en arrière et de faire glisser à nouveau? Que devons-nous faire avec cela?

Comment pouvons-nous nous assurer que nous avons inclus toutes les modifications? Si oui, comment la programmer?

Quest-ce quune machine à états?

Une méthodologie pour modéliser le comportement dune entité avec un cycle de vie établi

Lors de la construction de systèmes orientés états, les machines à états sont utiles pour nous aider à mieux déterminer les transitions et les déclencheurs compliqués.

Machines à états finis (FSM)

Il est une machine abstraite qui peut être exactement dans lun dun nombre fini d états à tout moment. Le FSM peut passer dun état à un autre en réponse à certaines entrées ; le passage dun état à un autre est appelé une transition . Un FSM est défini par une liste de ses états, son état initial et les entrées qui déclenchent chaque transition.

Poursuivons notre exemple dapplication de rencontres.Si nous créons un diagramme détat à partir de la logique derrière une correspondance , cela ressemble un peu à ceci:

* Différentes méthodes peuvent être utilisées par différents utilisateurs impliqués: soit des clients correspondants, soit lapplication de rencontres (constructeur de plateforme / entreprise).

Il a un nombre fini détats, modélisant tous les comportements dans le cycle de vie dune correspondance. Pour construire une machine à états, il suffit de suivre les lignes et de voir comment lentité réagit à divers comportements.

Pourquoi devrais-je utiliser une machine à états?

Bon maintenant je sais que le diagramme détat est vraiment utile, mais pourquoi devrais-je utiliser une machine à états lorsque jécris mon code?

À partir du même exemple, jetons un coup dœil à un code simplifié avant et après une machine à états est impliquée.

Avant dutiliser une machine à états

Vous pouvez repérer beaucoup de if/else instructions.

Après avoir utilisé une machine à états

Laissez la méthode ChangeState soccuper des transitions détat en utilisant le type StateTransition. Toutes les autres méthodes peuvent désormais se concentrer sur la logique de gestion de la correspondance.

Que puis-je faire de plus?

Pour nen nommer que quelques-unes:

  • Pour linstant, nous supposons que les méthodes «Rewind» sont suffisamment bonnes pour que les interfaces frontales puissent être appelées. Une manière plus délicate de traiter les méthodes devrait être de vérifier si la correspondance est enregistrée – et si oui, est-elle appréciée ou déplacée – puis de décider quelle commande utiliser. Au lieu de laisser linterface utilisateur faire le jugement (et risquer quelle soit erronée), il est plutôt suggéré de le gérer dans la classe MatchEntity.
  • Si létat transite devenir trop compliqué, essayez dutiliser une matrice avec laxe des états actuels et des commandes. Les données de la matrice peuvent être les états mis à jour. De cette façon, le code devient plus lisible.

Résumé

Alors pourquoi utiliser une machine à états? Parce que compte tenu des événements de changement détat (aka les comportements importants dune entité), il modélise mieux un système. La plupart du temps, tout le reste peut être résolu avec les méthodes CRUD de base. De plus, cela rend votre code plus lisible et plus facile à gérer.

Lorsquil sagit de créer des API, ne les concevez pas uniquement en fonction des demandes des chefs de produit. Concevez des API (au moins des API minimales) pour votre entité en gardant à lesprit les comportements et transitions critiques – états.

Référence

Richard Clayton – Use State Machines!

Les machines à états finis (FSM, ou dans le contexte de cet article, simplement « State Machines ») sont une méthodologie pour modéliser le…

rclayton. silvrback.com

Machine à états finis

Une machine à états finis (FSM) ou automate à états finis (FSA, pluriel: automates), automate fini, ou simplement un état…

en.wikipedia.org

Exemple de machine détat simple en C #?

Je viens de contribuer à ceci: https://code.google.com/p/ysharp/source/browse/#svn\%2Ftrunk\%2FStateMachinesPoC Voici celui …

stackoverflow.com

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *