No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Diseño de Máquinas de Estado para Reservas de Vuelos

4/15
Recursos

¿Cómo crear una máquina de estados para una aerolínea?

Crear una máquina de estados ofrece una estructura clara y organizada para gestionar los flujos complejos de una aplicación. En este ejemplo, desarrollaremos un flujo para la reserva de tickets en una aerolínea. Aquí te mostramos cómo hacerlo de manera efectiva utilizando el visualizer de XState.

¿Cuál es el flujo de la aplicación?

El flujo de la aplicación contempla varias etapas clave para completar el proceso de reserva de tickets:

  1. Buscar vuelos (seleccionar país): Selecciona un país de destino disponible.
  2. Agregar pasajeros: Añade los pasajeros con los que vas a viajar.
  3. Ver ticket impreso: Se muestra un ticket con el destino y los pasajeros.

Consideraciones del proyecto

  • Se pueden agregar múltiples pasajeros.
  • Existe la opción de cancelar el flujo en cualquier momento y regresar al inicio.
  • Los destinos son representados por países.

¿Cómo se estructura la máquina de estados?

La máquina de estados se compone de varios estados y transiciones definidos claramente. A continuación se describe cómo estructurarla.

// Configuración básica de la máquina de estados
const machine = {
  id: 'comprar_tickets',
  initial: 'inicial',
  states: {
    inicial: {
      on: {
        start: 'search'
      }
    },
    search: {
      on: {
        continuar: 'passengers',
        cancelar: 'inicial'
      }
    },
    passengers: {
      on: {
        done: 'tickets',
        cancelar: 'inicial'
      }
    },
    tickets: {
      on: {
        finish: 'inicial'
      }
    }
  }
};

Estados

  1. Inicial: Es la página de bienvenida y el punto de partida.
  2. Search: Aquí el usuario selecciona el destino.
  3. Passengers: Se añaden todos los datos de los pasajeros.
  4. Tickets: Se visualizan los detalles del ticket final.

¿Cómo se implementan las transiciones?

Las transiciones permiten moverse de un estado a otro mediante eventos específicos:

  • Start: Del estado inicial al search.
  • Continuar: Del search a passengers.
  • Cancelar: Desde cualquier estado retornando a inicial.
  • Done: De passengers a tickets.
  • Finish: De tickets de vuelta a inicial.

¿Cómo ejecutar la máquina de estados?

Para visualizar y probar la máquina de estados, utiliza el visualizer de XState:

  1. Define el objeto base con un ID y el estado inicial.
  2. Añade los estados e implementa cada transición.
  3. Usa visualize para actualizar y verificar que las rutas son correctas.

¿Qué sigue después de definir la máquina de estados?

¡Felicidades! Ahora que has bosquejado tu máquina de estados, es hora de implementarlo en un entorno de desarrollo real. En la próxima fase, llevaremos todo este aprendizaje al código y crearemos una aplicación funcional que utilice esta estructura. ¡Animate y sigue profundizando en el fascinante mundo del desarrollo!

Aportes 13

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

me gusta cómo va el curso hasta el momento, puesto que mis bases en el mundo de la programación se sustentan en la electrónica y la programación de sistemas embebidos, uno de ellos es el PLC, en el cual uno de sus 5 formas de programar según normativa el SFC (Sequence flow control) es muy similar a esto que se está viendo es verdaderamente fantástico...

Yo en mi caso preferí agregar un estado adicional llamado “Thanks”, porque en el estado Tickets debería haber la opción de culminar la compra o cancelar todo. En conclusión, me quedó así:

const fetchMachine = createMachine({
  id: "buy plane tockets",
  initial: "home",
  states: {
    home: {
      on: {
        START: "search",
      },
    },
    search: {
      on: {
        CONTINUE: "passengers",
        CANCEL: "home",
      },
    },
    passengers: {
      on: {
        DONE: "tickets",
        CANCEL: "home",
      },
    },
    tickets: {
      on: {
        BUY: "thanks",
        CANCEL: "home",
      },
    },
    thanks: {
      on: {
        FINISH: "home",
      },
    },
  },
});

En esta clase faltó mencionar que el mismo valor con el que definas “initial”, debes inicial el flujo de estados.
En el ejemplo de la clase, Estefany usó:
initial: “inicial” (línea 5)
y luego:
states: {
initial: {
}
}

Código visualizador:

import { createMachine } from 'xstate';

const bookingMachine = createMachine({
  id: 'buy plane tickets',
  initial: 'initial',
  states: {
    initial: {
      on: {
        START: 'search'
      }
    },
    search: {
      on: {
        CONTIUNE: 'passengers',
        CANCEL: 'initial'
      }
    },
    passengers: {
      on: {
        DONE: 'tickets',
        CANCEL: 'initial'
      }
    },
    tickets: {
      on: {
        FINISH: 'initial'
      }
    },
  }
})

Yo soy ingeniero electrónico y en el curso de electrónica digital me enseñaron este concepto de maquinas de estado finito el cual goze como no tienen idea. Todo el curso de electronica digital fue sistemas binarios, circuitos digitales, logica, sencuencia y el tema final este. Me resulta super ameno como lo esta enseñando la profesora y aun más grato poder recordar y aplicar estos conceptos.

https://stately.ai/registry/new aqui se puede realizar la practica muy parecido a psint

````js import { createMachine, assign } from "xstate"; const bookingMachine = createMachine({  id: "Buy plane ticket",  initial: "inicial",  states: {    inicial: {      on: {        START: "search",      },    },    search: {      on: {        CONTINUE: "passengers",        CANCEL: "inicial",      },    },    passengers: {      on: {        DONE: "tickets",        CANCEL: "inicial",      },    },    tickets: {      on: {        FINISH: "inicial",      },    },  },}); ```
Nuestro proyecto va a ser el flujo de apartar tickets en una aerolínea. La idea es que nosotros hagamos una búsqueda de vuelos que en realidad van a ser países, seleccionemos un país, luego de eso agreguemos a los pasajeros con los con ls que queremos volar y por último veamos el ticket impreso. Algunas consideraciones del proyecto son: * Se pueden agregar múltiples pasajeros. * En cualquier momento puedo cancelar la compra y volver al estado inicial. * Hay un listado de vuelos del cual seleccionar. ## **Mini-demo del proyecto** La página se llama `Book a fly` y este va a ser el `Welcome page` , es decir el estado inicial de nuestra máquina de estados. ![](https://static.platzi.com/media/user_upload/image-a65c91ef-2497-45c0-8312-0c6ee94c84fd.jpg) Al dar a `Comenzar` tengo que pasar a la `página de buscar destino` y seleccionamos algún país. ![](https://static.platzi.com/media/user_upload/image-db861765-5423-494b-ba2d-1c681ec84444.jpg) Continuamos, vamos a agregar a nuestros pasajeros. ![](https://static.platzi.com/media/user_upload/image-7f68d9b3-61ff-4b12-ae2b-0f7937a4ced2.jpg) Al ir a pagar, se nos mostrará nuestro ticket con el destino y los pasajeros que van al destino. Podemos ponerle un tiempo para ver el ticket y que si ya pasó el tiempo entonces que se reinicie la máquina. ![](https://static.platzi.com/media/user_upload/image-a32b7d7e-01db-4910-be2a-1fa1e1ffe0d5.jpg) El otro flujo que vamos a hacer es que hay un botón de `cancelar` en la parte superior que nos permite regresar al estado inicial. ![](https://static.platzi.com/media/user_upload/image-fcfcfbd4-856d-4319-a0a2-6ae27f93ddfe.jpg) ## **Bosquejo** Para realizar el bosquejo de la máquina de estados vamos a usar el visualizer de XState. ![](https://static.platzi.com/media/user_upload/image-61a9b415-fb28-42a5-aabe-674e31030908.jpg) ```js import { createMachine } from 'xstate'; const fetchMachine = createMachine({ id: 'buy plane tickets', initial: 'initial', states: { initial: { on: { START: "search", }, }, search: { on: { CONTINUE: "passengers", CANCEL: "initial", }, }, passengers: { on: { DONE: "tickets", CANCEL: "initial", }, }, tickets: { on: { FINISH: "initial", }, } } }); ```
Creo que no se han explicado bien los conceptos de entrada y de salida. Yo entiendo la entrada como un conjunto de eventos y la salida como un conjunto de transiciones o de estados visitados. Por ejemplo: Para la entrada entrada \[comenzar, continar, cancelar], daría la salida \[Inicial, Search, Passengers, Inicial]. ¿Ustedes que opinan?

El estado es como un flujo de agua que va recorriendo las tuberías de la maquina de estado.

Solo que ese flujo es a la velocidad de la luz.

Esto resuena mucho como la interpretación de los diagramas de flujo.

Excelente curso. Muchas gracias, me gusta