Finitomata
El boilerplate de màquines d'estats basat en callbacks
ofereix un boilerplate per implementar màquines d'estats finits, permetent centrar-se en la lògica de negoci en lloc de la gestió de processos i la consistència de les transicions. Llegeix la descripció de la màquina des d'una cadena en sintaxi PlantUML (
:state_diagram
) o Mermaid (
:flowchart
), valida que sigui consistent (un únic estat inicial, un o més estats finals, sense estats orfes) i genera un
GenServer
que es pot fer servir de manera independent o dins d'un arbre de supervisió.
La màquina generada només necessita un callback obligatori,
on_transition/4
;
on_failure/3
,
on_enter/2
,
on_exit/2
,
on_terminate/1
i
on_timer/2
són opcionals amb implementacions per defecte raonables. Diverses opcions n'ajusten el comportament:
timer:
per a callbacks recurrents,
auto_terminate:
per transicionar automàticament a l'estat final,
ensure_entry:
per reintentar una transició fins que tingui èxit,
hibernate:
,
cache_state:
i persistència connectable (adaptadors ETS i DETS inclosos).
Infinitomata
, inclòs al mateix paquet, és una implementació distribuïda autònoma basada en
:pg
per executar les mateixes màquines en un clúster.
Finitomata.ExUnit
ofereix un arnès de proves sense dependències externes amb
assert_transition/3
, assercions de fallada i generació d'esdeveniments basada en propietats.