REUSE1 - Creando una Biblioteca DSL Reutilizable

Esta sección cubre cómo crear una biblioteca DSL reutilizable. Con esto nos referimos a:

  • Un conjunto de componentes DSL que pueden ser integrados en un proyecto de implementación (flujo) diferente.

  • El código de implementación real para esos componentes.

Al crear una biblioteca reutilizable de esta manera, podemos crear componentes que son simplemente plug and play.

Cree un nuevo proyecto

Lo primero que necesitamos hacer es crear un nuevo proyecto. Hágalo utilizando el proyecto scaffolder:

mvn com.iconsolutions.ipf.build:ipf-project-scaffolder-maven:X. X. X:scaffold \
-DipfVersion=XXXX. X. X \
-DincludeBusinessFunctions=n \
-DincludeSampleSystems=n \
-DincludeApplication=n \
-DincludeE2E=n \
-DuseBuildScripts=y \
-DsolutionName=librarysolution \
-DmodelName=librarymodel \
-DflowName=SampleDomain \
-DprojectName=reuselibrary \
-DgroupId=com.iconsolutions \
-Dversion=0. 0. 1-SNAPSHOT \
-DartifactId=tutorial-reuse-library \
-DoutputDir=tutorial-reuse-library
Reemplace X. X. X y XXXX. X. X con lo apropiado scaffolder y los números de versión de IPF. Las versiones deben ser compatibles y se pueden encontrar en la documentación de lanzamiento de IPF.
Las propiedades definidas aquí deberían ser familiares, pero lo clave a tener en cuenta es que al definir bibliotecas reutilizables debemos establecer el valor de useBuildScripts en 'y'. Esto indica al proyecto que incluya los ajustes que permiten la MPS Archivo zip que debe ser incluido y publicado. Sin él, no podremos integrarlo correctamente en otro proyecto.

Tenga en cuenta que no hemos incluido los módulos E2E o de aplicación aquí. Esto se debe a que, en este escenario, la biblioteca no será una solución independiente ("ejecutable").

Creando la biblioteca reutilizable

Ahora pasemos a crear el proyecto. Para comenzar, constrúyalo y ábralo en MPS al igual que lo haríamos con un proyecto de flujo normal. Sin embargo, aquí veremos que en lugar de crear un flujo, le proporciona un dominio externo de muestra:

create reuse 1

Haremos las cosas simples aquí y simplemente implementaremos esto. Vamos a sumergirnos en nuestro proyecto de código. Lo primero que debe tener en cuenta es que el proyecto de servicio aquí es igual a cualquier otro proyecto IPF que hemos construido anteriormente y, de hecho, se aplican los mismos enfoques.

create reuse 2

En nuestra clase de configuración podemos ver la creación estándar de dominios:

@Bean
public LibrarymodelDomain librarymodelDomain(ActorSystem actorSystem, Dispatcher floDispatcher) {
    // All adapters should be added to the domain model
    return new LibrarymodelDomain. Builder(actorSystem)
            .build();
}

Para esta demostración, simplemente vamos a aplicar una rutina de 'rebote', es decir, devolver inmediatamente una respuesta de dominio de muestra de vuelta al propio dominio. Obviamente, en implementaciones reales haríamos algo diferente aquí, como llamar a un sistema remoto.

@Bean
public LibrarymodelDomain librarymodelDomain(ActorSystem actorSystem, Dispatcher floDispatcher) {
    // All adapters should be added to the domain model
    return new LibrarymodelDomain. Builder(actorSystem)
            .withSampleDomainActionAdapter(action -> LibrarymodelDomain.sampleDomain().handle(new SampleResponseInput. Builder(action.getId()).build()).thenAccept(done -> log.info("Completed a call into the sample domain.")))
            .build();
}

Eso es todo, nuestro dominio reutilizable está terminado y listo para usar. Primero, construyámoslo. Si luego mira en su maven repositorio que verá:

create reuse 3

Aquí, lo importante a tener en cuenta es la creación del archivo zip. Un zip es el MPS equivalente de un archivo jar estándar en maven.

Ahora intentemos utilizarlo.

Uso de la biblioteca

Comencemos creando un nuevo proyecto. Esta vez haremos un proyecto basado en flujos:

mvn com.iconsolutions.ipf.build:ipf-project-scaffolder-maven:X. X. X:scaffold \
-DipfVersion=XXXX. X. X \
-DincludeBusinessFunctions=n \
-DincludeSampleSystems=n \
-DincludeApplication=y \
-DincludeE2E=n \
-DuseBuildScripts=n \
-DsolutionName=clientsolution \
-DmodelName=clientmodel \
-DprojectName=reusetest \
-DgroupId=com.iconsolutions \
-Dversion=0. 0. 1-SNAPSHOT \
-DartifactId=tutorial-reuse-client \
-DoutputDir=tutorial-reuse-client
Reemplace X. X. X y XXXX. X. X con lo apropiado scaffolder y los números de versión de IPF. Las versiones deben ser compatibles y se pueden encontrar en la documentación de lanzamiento del IPF.

Al observar el comando anterior, puede ver que hemos cambiado los valores de nuestras banderas a: crear un proyecto de aplicación y no utilizar scripts de construcción. Esto proporcionará un proyecto de flujo básico para que lo utilicemos.

Antes de comenzar, agregue la dependencia a la nueva biblioteca que hemos creado. Para hacer esto, abra el pom.xml para el mps módulo:

create reuse 4

Entonces en el maven-sección-de-plugins-de-dependencia añada la siguiente ejecución:

<execution>
    <id>unpack-tutorial-library-plugin</id>
    <phase>initialize</phase>
    <goals>
        <goal>unpack</goal>
    </goals>
    <configuration>
        <artifactItems>
            <artifactItem>
                <groupId>com.iconsolutions.reuselibrary.domain</groupId>
                <artifactId>mps</artifactId>
                <version>0. 0. 1-SNAPSHOT</version>
                <type>zip</type>
                <overWrite>true</overWrite>
                <outputDirectory>${plugin_home}</outputDirectory>
            </artifactItem>
        </artifactItems>
    </configuration>
</execution>

Los valores clave a tener en cuenta son:

  • id- esto puede ser cualquier cosa. Lo clave es asegurar su unicidad frente a otras ejecuciones. Como buena práctica, una definición como la aquí que explique lo que está haciendo es recomendable.

  • groupId- esto será del formato: <maven-group-id>.<project-name>.domain, donde el maven-group-id y project-name son como se definen en el comando de creación previamente. Si no proporcionó un nombre de proyecto como parte del comando de creación, el nombre de la solución se convierte en el nombre del proyecto. Tenga en cuenta que siempre puede verificar sus valores observando la ruta en el repositorio.

  • artifactid- esto será mps.

  • versión- esto es el maven versión del proyecto de la biblioteca.

Eso es todo lo que necesitamos hacer por ahora, así que procedamos a construir nuestro proyecto. Esto incorporará las dependencias como cualquier normal.maven proyecto. Una vez finalizado, abramos MPS, y veremos que tenemos el flujo de ejemplo estándar:

create reuse 5

Agregaremos un paso adicional simple en nuestro flujo para llamar a nuestra nueva función reutilizable. Para hacer esto, cree un state’En Progreso' y luego cambie el initiation behaviour para llamarlo. Finalmente, opte por realizar una acción-por ahora no tendrá ninguna acción para elegir, por lo que debería ser así:

create reuse 6

Ahora elegimos importar nuestra nueva biblioteca. Para hacer esto, simplemente presione Ctrl+R dos veces para abrir el cuadro de importación como de costumbre y luego busque nuestro SampleDomain.

create reuse 7

Se nos pedirá que importemos el modelo.

create reuse 8

Y finalmente deberíamos poder reutilizar la biblioteca.

create reuse 9

Complete el flujo, según corresponda, añadiendo:

  • An event para cuando se reciba la respuesta, diga 'Respuesta Recibida'.

  • Un comportamiento de entrada que mapea la respuesta de muestra al nuevo event.

  • An event comportamiento para completar el flujo cuando el event es recibido.

Finalmente, necesitamos indicar a nuestra aplicación dónde obtener la implementación de nuestro dominio de solicitud de muestra. Para ello, simplemente añadimos la dependencia del servicio del proyecto de biblioteca a nuestro proyecto de servicio cliente:

<dependency>
    <groupId>com.iconsolutions</groupId>
    <artifactId>tutorial-reuse-library-service</artifactId>
    <version>0. 0. 1-SNAPSHOT</version>
</dependency>

Ahora construya nuestro proyecto nuevamente y luego inícielo (tenga en cuenta que necesitará un mongo en funcionamiento y una aplicación de desarrollador para que la aplicación se inicie correctamente). Luego, podemos enviar la solicitud curl de ejemplo normal para activar un pago, que podrá ver en la aplicación de desarrollador para verificar que se ha procesado correctamente y utilizar nuestro dominio de biblioteca:

create reuse 10

Conclusiones

En esta sección hemos aprendido cómo crear una biblioteca reutilizable, completa con toda la implementación de código necesaria para permitirnos integrarla en otro proyecto.