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:
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.
| 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:
|
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:
Esto significa que el lenguaje aún no se ha construido; para arreglarlo, simplemente ejecuta desde la raíz del proyecto:
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:
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:
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:
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:
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:
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:
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.