FSM vs convertirse/unbecome en Akka
(2)
Convertirse / Desobedecer son muy ligeros en contraste con los FSM. Entonces, a menos que tenga más de 2 estados (por ejemplo, encendido / apagado) y / o políticas complejas de cambio de estado, no convertiría Become / Unbecome en un FSM completo. Aparte de eso, creo que solo hay pequeñas diferencias ... Como, por ejemplo, las FSM te dan un bonito temporizador DSL integrado:
setTimer("TimerName", msg, 5 seconds, repeat = true)
// ...
cancelTimer("TimerName")
O, por ejemplo, no estoy seguro de que sea posible en un FSM "regresar" al estado anterior, solo hay "avanzar", ya que tiene que especificar explícitamente a qué estado ir. Mientras que unbecome
te da exactamente eso.
Akka proporciona dos formas un tanto superpuestas para administrar los estados de los actores, las máquinas de estados finitos y los que no se unbecome/become . ¿Cuáles son sus respectivos beneficios / inconvenientes? ¿Cuándo debería uno de ellos ser elegido sobre el otro?
FSM
es un DSL que le permite construir máquinas de estado más sofisticadas y legibles de lo que sería posible utilizando la API del actor principal. Podrías mostrar el código FSM a una persona de negocios y podrían validar las reglas de negocios.
El FSM
DSL te permite componer cosas de manera más limpia. Por ejemplo, las transitions permiten eliminar la lógica que tendría que ser duplicada a través de los comportamientos de los actores. También puede suscribir a otros actores para que se les notifiquen las transiciones que ayudan con el desacoplamiento y la prueba.
También los temporizadores se integran muy bien en el DSL y las cosas como la cancelación se manejan limpiamente. La codificación de los mensajes de tiempo de espera utilizando el programador tiene una serie de errores.
La desventaja de FSM
es que es un DSL y una nueva sintaxis para que otros miembros del equipo lo digieran. El lado positivo es que es un DSL y una abstracción de nivel mucho más alto. Creo que el umbral de agilesteel de 2 estados es bueno. Pero una vez que pasas los 2 estados, los beneficios de FSM
son realmente convincentes.
Definitivamente, lea los documentos FSM y los ejemplos adjuntos que contrastan se become
FSM
.
Una nota es: "hacer estallar" un comportamiento que no es unbecome
- el comportamiento predeterminado es no usar el comportamiento de apilamiento. Solo es relevante en un pequeño número de casos de uso (es decir, generalmente no en máquinas de estado).