Documentation for a newer release is available. View Latest

DSL 2 - Abrir el proyecto de ejemplo

Comenzando

Este paso del tutorial utiliza la solución "initial".

En Revisión de la aplicación inicial del tutorial vimos la configuración básica del proyecto y arrancamos un flujo y ejecutamos un pago a través de él, mientras que en DSL 1 - Introducción al DSL de Icon aprendimos los conceptos básicos que conforman el DSL de pagos.

Los flujos se mantienen mediante el producto MPS de JetBrains, que usa el DSL de Icon. Asegúrate de haber descargado la versión correcta de MPS indicada en home.adoc#_setting_up_your_own_environment.

Esta sección del tutorial es una guía para principiantes sobre cómo abrir el flujo de ejemplo en MPS y aprender la navegación básica por sus partes constituyentes.

Puede que el siguiente vídeo te resulte una introducción útil para comprender tanto las piezas móviles de una aplicación IPF como el flujo de trabajo de desarrollo de la aplicación.

Abrir el flujo

Para empezar, abramos nuestro flujo. Para ello iniciamos el producto JetBrains MPS y se te pedirá abrir un proyecto:

open 1

Como estamos usando un proyecto existente, haremos clic en "Open" aquí para ver nuestro proyecto ipf-tutorial. Para abrirlo debemos navegar al directorio domain-root/mps de nuestro proyecto [<tutorial-install-root>/solutions/initial/domain-root/mps]. Se resaltará con un pequeño cuadrado negro en la esquina del nombre del directorio, indicando que MPS puede identificar el directorio como la raíz de un proyecto MPS.

open 2
Ten cuidado al abrir una segunda ventana/instancia de MPS para ver una versión distinta de la solución MPS. Es probable que obtengas contención entre las dos instancias.

Estructura del proyecto

Cuando el proyecto se abre, deberías poder ver en la vista del proyecto de la izquierda:

open 3
Resolución de problemas

Si no has construido antes tu aplicación (por ejemplo, si has venido directamente desde la solución), es posible que veas esto al abrir el proyecto:

open 4

Esto significa que el lenguaje aún no se ha construido; para arreglarlo, simplemente ejecuta desde la raíz del proyecto:

mvn clean install

Si lo necesitas, las instrucciones de construcción y ejecución se tratan con más detalle en: Revisión de la aplicación inicial del tutorial

Tomemos un momento para comentar cómo está estructurado esto.

  • Empezarás en el nivel más bajo: Ipftutorialflow. Observa el símbolo "F" aquí que denota que "Ipftutorialflow" es un flujo; como veremos al ampliar y añadir conceptos en nuestra solución, otros componentes tienen símbolos diferentes para identificar fácilmente qué son.

  • Nuestro flujo está contenido en ipftutorialmodel: un modelo es un contenedor de agrupación que nos permite asociar flujos entre sí. Desde la perspectiva de la aplicación, trabajamos a nivel de modelo, de modo que toda la interacción se realiza a ese nivel. Más adelante introducirás el concepto de la clase de dominio, que representa la única interfaz hacia un modelo.

  • Nuestro modelo está contenido en Ipftutorialsolution: una solución es una agrupación de modelos; lo clave a tener en cuenta de las soluciones es que se construyen juntas y, por lo tanto, es fácil compartir componentes de distintos modelos dentro de diferentes soluciones.

  • Por último, nuestra solución está contenida en "IPF Tutorial Project": un proyecto es simplemente una colección de soluciones.

En general, la mayoría de las aplicaciones que construiremos funcionarán efectivamente como: proyecto único - solución única - modelo único - configuración de uno (o más) flujos. En Revisión de la aplicación inicial del tutorial se introduce cómo podemos compartir modelos entre distintos proyectos.

En la parte superior de la vista del proyecto, podemos ver que estamos actualmente en la "logical view". Esta es la mejor vista para navegar y trabajar con el DSL. Hay otras vistas disponibles:

open 5

Estas nos permiten ver nuestros componentes de diferentes maneras, por ejemplo, mirando los archivos en el sistema de archivos. Esto es especialmente útil cuando intentamos revisar cómo se ve y se estructura el código generado.

Ver el flujo

Ahora, echemos un vistazo a nuestro flujo. Si hacemos doble clic en él en la vista del proyecto, debería abrirse en la ventana principal:

open 6

Al desplazarte por el flujo, esperamos empezar a ver secciones que representan los conceptos que revisamos en la sección anterior de la serie del tutorial.

El visor de flujos

Empecemos haciendo clic en cualquier parte de la pestaña del flujo y usando la barra de herramientas principal para elegir Tools > Open Flo Viewer. Esto debería mostrar una nueva pestaña en la pantalla que muestra un diagrama de nuestro flujo:

BasicFlow

Aquí podemos ver que tenemos un flujo muy sencillo que recibe una petición de iniciación, crea el evento "Flow Initiation" e inmediatamente completa. Es, en esencia, el flujo más simple que podemos tener.

El flo-viewer por defecto se abre como una pestaña separada en línea. Si quieres, puedes hacer clic en el pequeño engranaje en la esquina superior derecha:

open 8

Y luego elegir, por ejemplo, desacoplarlo (undock), lo que te permite mover el visor flo. ¡Esto es genial cuando trabajas con varias pantallas!

Una de las características clave del visor flo es que se actualiza en tiempo real mientras editas tu flujo. Eso significa que puedes ver en vivo cómo los cambios que haces en la definición de tu flujo afectan al flujo de forma gráfica.

Intenciones

Para quienes estén familiarizados con los productos de JetBrains, puede que ya hayan visto las intenciones. Son funciones abreviadas que proporcionan acceso rápido y sencillo a utilidades comunes. El DSL de Icon tiene varias intenciones a lo largo de todo él para ayudar a facilitar un poco las cosas. Puedes acceder a las intenciones desde cualquier lugar pulsando Alt+Enter. Si lo haces ahora, veremos:

open 9

Aquí vemos dos intenciones, una para crear una nueva versión del flujo (lo haremos en DSL 8 - Versionado) y otra para validar el flujo (¡la usaremos mucho a lo largo de la serie del tutorial!).

Lo otro a destacar de las intenciones es que son específicas de lo que estás haciendo en ese momento, de modo que, como veremos en secciones posteriores, la lista de intenciones puede proporcionar un montón de pequeños trucos útiles específicos de lo que intentas hacer en ese momento.

Inspeccionar el flujo

Ahora que tenemos un flujo, es hora de construirlo. Primero revisemos nuestra configuración; en el menú superior ve a Build y asegúrate de que están seleccionadas "Save Transient Models" y "Check models before generation".

  • La opción "Check models before generation" hace que MPS valide tu modelo antes de intentar construirlo. Cualquier error se te mostrará y podrás hacer clic en ellos para ir al problema y resolverlo.

  • La opción "Save Transient Models" hace que MPS te muestre todos los pasos que ha seguido para generar el código. Normalmente no necesitamos esto, pero lo configuramos aquí como una forma de ayudarte a entender lo que se ha hecho durante la build.

Construyamos nuestro flujo haciendo clic derecho en el modelo Ipftutorialmodel y pulsando rebuild model ipftutorialmodel. Esto tardará unos segundos; una vez finalizado, en el navegador expande el transient final:

BDD

Inspeccionar los artefactos generados

Aquí puedes ver algunos de los artefactos que se han generado para el flujo; incluyen:

  • Todo el código de la aplicación, que incluye:

    • El Event Sourced Behaviour de AKKA generado

    • Todos los puertos generados que la aplicación necesita para integrarse

    • La clase de dominio generada que permite la interacción externa con el flujo

  • La documentación generada

  • Las clases de test BDD generadas

  • Las implementaciones de ejemplo generadas de los puertos creados

Echa un vistazo a algunos de estos artefactos; se tratarán con más profundidad en secciones futuras.

Conclusiones

En esta sección del tutorial hemos visto:

  • Abrir flujos en MPS.

  • Estructuras básicas de proyectos MPS.

  • Flow Viewer.

  • Intenciones.

  • Generación básica.