Estados y máquinas de estado

Publicado el

Usar máquinas de estado para definir comportamientos y transiciones de estado: explicado con aplicaciones de citas

(20 de diciembre de 2020)

¿Qué es un estado?

En tecnología de la información e informática, un sistema se describe como stateful si está diseñado para recordar eventos anteriores o interacciones del usuario; la información recordada se denomina estado del sistema .

Los estados de un sistema a menudo se definen por la agregación de comportamientos que realizan sus usuarios. Los estados son importantes porque es una forma más sistemática de verificar si ciertos comportamientos en ciertos estados son válidos o no.

Estados de un semáforo

Considere un semáforo como ejemplo. Si ha sido verde, los conductores y pasajeros esperan ver amarillo, no rojo, a continuación. Cuando se vuelve amarillo, esperarían rojo y no verde. Entonces, los estados aquí son simples:

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

Siga las flechas (también conocidas como las transiciones permitidas de estados) y su semáforo estará listo.

Estados de las coincidencias en las aplicaciones de citas

Ahora, tomemos una aplicación de citas como un ejemplo más complicado. Imaginemos que estamos creando una aplicación para que las personas «emparejen» en línea. Digamos que tenemos los algoritmos listos y necesitamos empezar a escribir las lógicas detrás de las coincidencias que aparecen en las aplicaciones de nuestros usuarios.

Definamos una entidad match primero para representar la coincidencia entre dos personas. Hay varios estados para una coincidencia que deberíamos tener en cuenta si tuviéramos que diseñarla.

Necesitamos los estados para que la gente no vea comportamientos inesperados, como la aparición de una persona aleatoria que no coincide. en la pantalla diciendo hola.

Foto de Yogas Design en Unsplash

Mi proceso de pensamiento:

  1. En primer lugar, una coincidencia debe ser creada , lo que significa que un determinado conjunto de algoritmos para seleccionar dos personas listas para un partido. Por supuesto, los algoritmos deben asegurarse de antemano de que ambos estén listos para una coincidencia, que se ajusten a las preferencias del otro, que no estén prohibidos, etc.
  2. Entonces, esta coincidencia podría convertirse en pendiente (esperando el deslizamiento de otra persona) o fallido dependiendo de la acción del primer usuario. Si el usuario desliza el dedo hacia la derecha (que significa «me gustas» en términos de aplicaciones de citas), el estado salta de creado a pendiente . Si el usuario desliza el dedo hacia la izquierda (que significa «No me gustas»), el estado cambia a fallado .
  3. Luego, si ambas personas se gustan, pasa de pendiente a coincidió .
  4. Cualquiera de las personas en una coincidencia también podría «desemparejar» una coincidencia, llevando el estado a incomparable .
  5. Creo que cubrí todos los cambios de estado. ¿Pero son todos estos? Mmmm … ¿no hay una función de pago llamada «rebobinar» que te permite retroceder y deslizar el dedo de nuevo? ¿Qué debemos hacer con esto?

¿Cómo nos aseguramos de haber incluido todos los cambios? Si es así, ¿cómo lo programamos?

¿Qué es una máquina de estado?

Una metodología para modelar el comportamiento de una entidad con un ciclo de vida establecido

Al construir sistemas orientados a estados, las máquinas de estados son útiles para ayudarnos a determinar mejor las transiciones y disparadores complicados.

Máquinas de estados finitos (FSM)

It es una máquina abstracta que puede estar exactamente en uno de un número finito de estados en cualquier momento. El FSM puede cambiar de un estado a otro en respuesta a algunas entradas ; el cambio de un estado a otro se denomina transición . Un FSM se define por una lista de sus estados, su estado inicial y las entradas que desencadenan cada transición.

Sigamos con nuestro ejemplo de aplicación de citas.Si creamos un diagrama de estado a partir de la lógica detrás de una coincidencia , se parece a esto:

* Los diferentes usuarios involucrados pueden tomar diferentes métodos: cualquiera de los clientes emparejados o la aplicación de citas (creador de plataforma / empresa).

Tiene un número finito de estados, modelando todos los comportamientos dentro del ciclo de vida de una coincidencia. Para construir una máquina de estado, solo tenemos que seguir las líneas y ver cómo la entidad responde a varios comportamientos.

¿Por qué debería usar una máquina de estado?

Bien, ahora sé que el diagrama de estado es realmente útil, pero aún así, ¿por qué debería usar una máquina de estado cuando estoy escribiendo mi código?

Del mismo ejemplo, echemos un vistazo a un código simplificado antes de y después de una máquina de estado está involucrada.

Antes de usar una máquina de estado

Puede detectar muchos if/else declaraciones.

Después de usar una máquina de estado

Deje que el método ChangeState se encargue de las transiciones de estado usando el tipo StateTransition. Todos los demás métodos ahora pueden enfocarse en la lógica del manejo del partido.

¿Qué más puedo hacer?

Solo por nombrar algunos:

  • Por ahora asumimos que los métodos «Rewind» son lo suficientemente buenos para que las interfaces frontend llamen. Una forma más delicada de tratar con los métodos debería ser comprobar si la coincidencia está registrada y, de ser así, si le gusta o no, y luego decidir qué comando usar. En lugar de dejar que la interfaz de usuario haga el juicio (y correr el riesgo de que sea incorrecto), se sugiere que lo manejemos en la clase MatchEntity.
  • Si el estado cambia complicarse demasiado, intente usar una matriz con el eje de los estados y comandos actuales. Los datos de la matriz pueden ser los estados actualizados. De esta manera, el código se vuelve más legible.

Resumen

Entonces, ¿por qué usar una máquina de estado? Porque considerando los eventos de cambio de estado (también conocidos como comportamientos importantes de una entidad), modela mejor un sistema. Casi todo lo demás se puede resolver con métodos CRUD básicos. Además, hace que su código sea más legible y fácil de mantener.

Cuando se trata de crear API, no las diseñe solo en función de las solicitudes que hagan los gerentes de productos. Diseñe API (al menos API mínimas) para su entidad con los comportamientos críticos y las transiciones (estados) en mente.

Referencia

Richard Clayton – Use State Machines!

Las máquinas de estado finito (FSM, o en el contexto de esta publicación, simplemente «Máquinas de estado») son una metodología para modelar el…

rclayton. silvrback.com

Máquina de estado finito

Una máquina de estado finito (FSM) o autómata de estado finito (FSA, plural: autómatas), autómata finito o simplemente un estado …

en.wikipedia.org

¿Ejemplo de máquina de estado simple en C #?

Acabo de contribuir con esto: https://code.google.com/p/ysharp/source/browse/#svn\%2Ftrunk\%2FStateMachinesPoC Aquí «s uno …

stackoverflow.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *