DSL 1 - Presentando el DSL de Icon

Descripción general

Encontrará el siguiente video (10 minutos de duración) una introducción muy útil a la estructura básica de un IPF application. También proporciona una visión general de alto nivel de los conceptos de DSL discutidos en esta sección del tutorial.

Conceptos

Esta sección del tutorial introduce los conceptos dentro del Icon payments DSL. Es un recorrido teórico y no requiere acceso a ningún componente de IPF.

Business Data

Comenzamos considerando los datos. Los datos son lo que impulsa el procesamiento y decision-realización a lo largo de IPF.

El primer concepto que consideramos, por lo tanto, es el "Business Data Elemento". Tiene cuatro propiedades:

  • Un nombre

  • Una descripción

  • A "data type" - el data type puede ser cualquier Java tipo, ya sea clases estándar como String, Integer, etc. o sus propios tipos personalizados.

  • A "data category" - un campo opcional, los valores posibles son un conjunto enumerado que se refiere al tipo de datos que está siendo representado por este BusinessDataElement. Este Data Category la etiqueta es utilizada por varios componentes de IPF, como IPF Data Egress y Operational Data Store, que puede registrar automáticamente los datos capturados de Process Flow s automáticamente, dependiendo de la Data Category. Hay cuatro core categorías de datos:

    • ESTRUCTURA_DE_DATOS_DE_MENSAJE - Estos son datos que provienen de mensajes financieros externos que a menudo se modelan como ISO20022 componentes de mensaje dentro de IPF.

    • ESTRUCTURA_DE_DATOS_DE_PROCESAMIENTO - Estos son datos recopilados durante el procesamiento de pagos, como información de metadatos y tipo de pago.

    • IDENTIFICADOR_ADICIONAL - Esto se aplica a los elementos de datos que representan identificadores adicionales que deben asociarse con el pago.

Cualquier MPS el proyecto puede tener tantas diferentes business data elementos según sea necesario. Estos elementos están definidos dentro de un "Business Data Biblioteca" que es simplemente una colección de relacionados business data y tantos diferentes business data Las bibliotecas pueden definirse según sea necesario.

IPF proporciona una serie de configuraciones predefinidas business data bibliotecas. Por defecto, a cualquier proceso se le asigna la biblioteca "error", que proporciona elementos predeterminados para manejar fallos en el flujo, a saber:
  • Failure Event Name-este es el nombre de la event que registró la primera falla en un flujo.

  • Failure Response Code-este es el código de respuesta IPF para la falla.

  • Failure Reason Code-este es el código de razón IPF para la falla.

  • Failure Reason Text-este es el texto de descripción de falla del IPF.

  • Failure Original Response Code - Esto permite la especificación de cualquier código de respuesta original involucrado (que puede haber sido mapeado a uno de IPF).

  • Failure Original Reason Code - Esto permite la especificación de cualquier código de razón original involucrado.

  • Failure Original Reason Text - Esto permite la especificación de cualquier texto de razón original involucrado.

Los conceptos de razón y response codes se discuten más adelante en este documento.

Dentro de la duración de un pago cada business data el elemento es único y puede ser actualizado según sea necesario.

Flujo

El procesamiento de un pago es realizado por un "Flow". Un flow representa un único proceso de negocio de principio a fin y está diseñado para especificar la duración de un único pago. Un solo flow puede tener múltiples caminos a través de él, cada uno representando una forma diferente de procesar un pago individual basado en los datos proporcionados para ese flow. Un flow contiene una serie de elementos:

  • Un nombre

  • Una descripción

  • Una versión

  • A global state conjunto

  • Una lista de "Estados"

  • Una lista de " Events "

  • Un " Initiation Behaviour "

  • Una lista de " Input Behaviours "

  • Una lista de " Event Behaviours "

  • Una lista de " Aggregate Functions "

  • Una lista de " Mapping Definiciones de Función

Se discute una definición de cada uno de estos aspectos en las siguientes secciones.

La combinación de "Nombre del Flujo" y "Versión del Flujo" identifica de manera única un flujo. La versión es solo un identificador numérico opcional, por lo que, por ejemplo, un flujo puede llamarse "Prueba" y tener la versión 3. Entonces, el flujo puede ser identificado de manera única como "Prueba V3". Si no se definió una versión, puede ser identificado simplemente por el nombre "Prueba". Este identificador se conoce como "*_Flow Id_*".

Global States

Primero consideramos el "Global State Set". El global state el conjunto es un conjunto de estados que representan el total state de un pago. Se utiliza particularmente cuando un pago puede abarcar múltiples flujos (por ejemplo, si el procesamiento del pago se divide en partes de "iniciación" y "ejecución"), pero también puede aplicar un tipo de agrupación general.state a las partes individuales del flujo para simplificar lo aparente state transiciones desde un nivel de pago. Cada nivel de flujo state puede ser mapeado a un global state de manera que múltiples estados de nivel de flujo puedan ser considerados para dejar el pago en el mismo global general state.

Un global por defecto state se proporciona un conjunto que ofrece los siguientes estados estándar: Pendiente, Aceptado, Rechazado, Acción Manual Requerida y Cancelado.

Estados

El siguiente concepto a considerar dentro de nuestro flujo es un "Estado". Esto es muy simplemente un resting punto en el flujo por el que el pago puede pasar en su recorrido, así que, por ejemplo, podemos tener un flujo muy simple que va de " State A" a " State B".

A state tiene una serie de propiedades:

  • Un nombre

  • Una descripción

  • A global state

  • Un terminal flag-el terminal flag se utiliza para indicar que esto finaliza el flujo al que el state pertenece.

Cada flujo puede contener muchos estados diferentes.

Events

Cuando un flujo se mueve de uno state a otro, esto se conoce como una "Transición de Estado". Dentro de IPF, para un state la transición debe ocurrir, entonces el sistema necesita recibir un "Event" en el proceso de pago. En este caso, es en realidad un tipo específico de event conocido como un "Domain Event". A domain event es un hecho persistente-la llegada de un event significa que ha ocurrido algo explícito que puede causar algún tipo de cambio en el procesamiento de nuestro pago.

An event tiene una serie de propiedades:

  • Un nombre

  • Una descripción

  • Una lista de business data elementos.

Cuando un event se forma, entonces el sistema verificará su propio comportamiento para determinar qué acciones deben realizarse. Aunque este comportamiento se explorará más adelante en este documento, vale la pena señalar aquí que hay tres ocasiones en las que un event puede causar un cambio en el procesamiento, estos se conocen como las condiciones de "Criterios de Evento" y se definen como:

  • Encendido- este movimiento ocurrirá a la llegada de un solo event(por ejemplo, podemos hacer la transición al recibir " Event 1")

  • En cualquiera de- este movimiento ocurrirá a la llegada de uno de múltiples events(por ejemplo, podemos hacer la transición al recibir cualquiera de " Event 1" o " Event 2")

  • En todos los- este movimiento solo ocurrirá tras la llegada de múltiples events(por ejemplo, podemos realizar la transición solo después de recibir ambos " Event 1" y " Event 2")

Aquí hemos descrito el " Domain Event "cuál es el tipo de" event que se declara explícitamente dentro de cualquier MPS solución. Sin embargo, IPF en su conjunto utiliza una serie de diferentes tipos de event:
  • " System Event "- esto ocurre cuando algo sucede en el sistema y puede ser adaptado para ser específico a las necesidades individuales.

  • " Action Timeout Events "- estos events ocurren durante el procesamiento cuando se rompen los ajustes de tiempo de espera configurados.

  • " Decision Events "- estos event se utilizan como respuesta a la recepción de resultados de decisions.

Todo esto event los tipos se discuten más adelante en este documento.

External Domains

Después de un event se procesa, la aplicación puede entonces realizar una o más actividades para determinar qué sucede a continuación con un pago. Así que, por ejemplo, al recibir " Event Podemos desear realizar alguna validación y llamar a otra aplicación para solicitarle que valide nuestros datos.

Para apoyar esta publicación-event procesamiento, el concepto más importante es el "Dominio Externo". Esto representa algún dominio empresarial -no es el flujo actual de nosotros- con la que necesitamos interactuar.

Por ejemplo, supongamos que necesitamos comunicarnos con un sistema de sanciones durante parte del flujo. Para apoyar esto, modelaríamos ese sistema de sanciones como un dominio externo.

Cada dominio externo consiste en los tres tipos de interacción que podemos realizar con él:

  • "Instrucciones" - instructions son la cosa más simple que recibimos de un dominio externo. Puede ser triggered por el dominio externo en cualquier momento y comenzaremos a procesar. Esto puede considerarse como el dominio externo enviando información a nosotros.

  • "Notificaciones" - las notificaciones son lo opuesto de instructions. Estos se utilizan cuando queremos enviar nuestros datos a un dominio externo.

  • "Solicitudes" - Una solicitud se utiliza cuando necesitamos una "respuesta" del dominio externo en respuesta.

Instructions

Primero, consideremos la instrucción. Estas pueden ser iniciadas por un sistema externo y contienen las siguientes propiedades:

  • Un nombre

  • Una descripción

  • Una lista de " Business Data Elementos

Cuando el IPF application recibe una instrucción, generará un correspondiente event(the decision de los cuales event para aumentar se describe más adelante). El event’s business data se completa con todas las coincidencias business data elementos.

Notifications

A continuación se encuentra la notificación, como una instrucción tiene las siguientes propiedades:

  • Un nombre

  • Una descripción

  • Una lista de " Business Data Elementos

Cuando el IPF application envía una notificación que se completará con toda la business data elementos para los cuales tiene un registro coincidente.

Solicitudes

Finalmente, consideramos las solicitudes. La solicitud puede ser considerada como compuesta por dos partes, la solicitud en sí y la respuesta correspondiente.

La parte de la solicitud contiene:

  • Un nombre

  • Una descripción

  • Una lista de business data

  • Una lista de respuestas

La parte de respuesta es ligeramente diferente y tiene algunas nuevas características a considerar:

  • Un nombre

  • Una descripción

  • Una lista de business data

  • Un "código de respuesta set" - este es un grupo de response codes Un "Código de Respuesta" es un código de resultado esperado para una respuesta que podría ser utilizado para un procesamiento posterior. En términos de ISO, esto es análogo a un Estado.

  • Un "conjunto de códigos de razón" - este es un grupo de reason codes Un "Código de Razón" es una razón por la cual la respuesta se establece de esa manera. Por ejemplo, su código de respuesta podría ser "Rechazado" con una razón "Moneda Incorrecta". En términos de ISO, un código de razón tiene un Estado de Razón.

  • A completar flag-esto define si la solicitud de llamada debe considerarse completada cuando esta respuesta llega. Por ejemplo, considere una solicitud en la que el sistema externo envía un acuse de recibo técnico seguido de una respuesta comercial final. En este caso, definiríamos dos respuestas.- uno para representar el acuse técnico (no completando) y uno la respuesta comercial (completando).

En términos de ISO, un código de respuesta es análogo a un "Estado", mientras que un código de razón es análogo a una "Razón de Estado".
El sistema proporciona un conjunto de códigos de respuesta predeterminados "AcceptOrReject" que se utiliza para respuestas estándar de aprobación / rechazo. También proporciona un conjunto de todas las normas ISO reason codes.

Ahora unamos estos elementos y formemos la base de cualquier flujo:

intro 1

Aquí podemos ver que cuando IPF recibe algo de un dominio externo (ya sea una instrucción o una respuesta), conduce a un event se está planteando lo que puede causar un state transición seguida de la invocación de una notificación o solicitud a un dominio externo.

Domain Functions

Es posible que no deseemos tener que llamar a un dominio externo para continuar procesando nuestro flujo. Esto puede suceder porque sabemos qué hacer a continuación o podemos calcular qué hacer a continuación. Para esto, hay dos conceptos adicionales que debemos considerar:

En este caso, una opción es utilizar la capacidad de "Función de Dominio" que el flujo mismo ofrece. Funciona de manera muy similar a un par de solicitud/respuesta en una llamada a un dominio externo, excepto que en el caso de una función de dominio, el IPF application en sí mismo es un dominio, por lo que la llamada real permanece interna (considere, por ejemplo, crear un dominio externo que represente nuestro flujo actual-esto funcionaría de la misma manera que una función de dominio, pero sería una representación errónea de la lógica de control real). Por lo tanto, cuando llamemos a una función de dominio, esperaremos recibir una respuesta y luego esa respuesta será transformada en un event lo que puede causar un procesamiento posterior.

Como una solicitud, la función de dominio tiene una serie de propiedades:

  • Un nombre

  • Una descripción

  • Una lista de business data

  • Una lista de respuestas

Additional Events

La segunda opción es un "Adicional Event- estos también pueden ser utilizados para mover el flujo.

Cuando un adicional event se eleva, el sistema lo procesará como si hubiera sido recibido en la aplicación a través de una instrucción o respuesta.

Añadamos estos a nuestro diagrama:

intro 2

Decisions

Sin embargo, ¿qué sucede si queremos realizar alguna lógica de manera condicional? Por ejemplo, puede que solo deseemos ejecutar un chequeo de fraude si el valor del pago es superior a £50. En este caso, podemos utilizar un "Decision".

A decision nos permite realizar cierta lógica y luego tomar diferentes rutas de procesamiento posteriormente basadas en el resultado de eso decision. A decision tiene una serie de propiedades:

  • Un nombre

  • Una descripción

  • Una lista de business data-este es los datos que se envían al llamar al decision para que pueda procesar en función de ello.

  • Una lista de " Decision Resultados-estos son los posibles resultados de ejecutar el decision, cada decision puede tener tantos resultados diferentes como sea necesario y estos resultados son únicos para el decision. Se definen simplemente proporcionando un nombre.

El decisions se almacenan dentro de una "Biblioteca de Decisiones". Las bibliotecas son independientes del flujo y, como tal, la misma decision puede ser utilizado en múltiples flujos.

Podemos utilizar un decision en dos lugares:

  • Para determinar cuál event debe ser elevado en respuesta a una entrada (respuesta o instrucción)

  • Para determinar qué acciones deben realizarse después de un state transición.

Añadamos estos a nuestro diagrama:

intro 3
Un tipo especial de event "A Decision Resultado Event "también se planteará para que el hecho de que el" decision se ha invocado y un resultado devuelto será auditado y podrá ser utilizado en el procesamiento posterior.

Aggregate Functions

Otra utilidad útil a considerar es el "Aggregate Function". An aggregate function es un conjunto de lógica que puede ser ejecutado al recibir un event para realizar algún tipo de lógica sobre los datos recibidos. Estos datos se consideran "en tránsito" y, por lo tanto, no son persistidos por la aplicación.

Un buen ejemplo de esto es, por ejemplo, un contador que rastrea el número de veces que algo ha ocurrido durante un flujo.- cada vez que se llama a la función, podemos actualizar ese contador. El resultado de la aggregate function entonces se vuelve disponible más adelante en el flujo.

Otro buen caso de uso puede ser realizar un data mapping ejercicio para transformar los datos en algo que pueda ser utilizado posteriormente.

Agreguemos el aggregate function a nuestro diagrama:

intro 4

Behaviours

Los siguientes conceptos a considerar son ambos tipos de agrupamiento. Para separar la lógica, debemos definir cuándo procesar una entrada al sistema (de una respuesta o instrucción) y generar el event a la lógica requerida al procesar el comportamiento real del sistema basado en eso event tenemos dos conceptos de agrupación:

  • "Comportamiento de Entrada" - este es el comportamiento que especifica para cada entrada qué event se generará.

  • Event Comportamiento- este es el comportamiento que especifica qué acciones deben tomarse al recibir un event.

Comportamiento de Entrada

Un comportamiento de entrada tiene una serie de propiedades:

  • Una entrada-esto es la entrada (instrucción o respuesta) sobre la cual se basa el comportamiento es triggered.

  • Un código de respuesta-este es el código de respuesta (vinculado a la respuesta si la respuesta es una entrada, de lo contrario este campo no es aplicable) para el cual se aplica el comportamiento

  • An event-esto puede ser un event directamente o a través de la ejecución y el resultado de un decision.

    Tenga en cuenta que al utilizar response codes, si no se define uno en un comportamiento de entrada, este se considerará el comportamiento "predeterminado" para todos.response codes.

Event Comportamiento

El event el comportamiento es un poco más complicado. Tiene una serie de propiedades:

  • A "Actual State" - esto es el state sobre el cual el flujo debe estar para que se aplique el comportamiento.

  • Un "Criterio" - esto es cuando se aplica el comportamiento (en / en todos / en cualquiera de)

  • Una lista de events-uno o más events, estos pueden ser de cualquier tipo de event(por ejemplo, dominio, tiempo de espera, etc.)

  • Un "Mover a State " - el destino state del comportamiento

  • Una lista de acciones-estas son las acciones que deben realizarse después del state transición, es decir, solicitudes,notifications etc.

Actualicemos nuestro diagrama para mostrar estos:

intro 5
Tenga en cuenta que el aggregate function, como una unidad de cálculo independiente no se considera ni como el event o comportamiento de entrada, sino como una capacidad funcional propia

Initiation Behaviour

Hay un tipo más clave de comportamiento a considerar, que es el "Initiation Behaviour". El initiation behaviour es una versión especializada del comportamiento de entrada previamente definido, pero solo se utiliza para iniciar un flujo. No está vinculado a un dominio externo, de modo que podemos iniciar el flujo potencialmente desde muchas fuentes diferentes.

An initiation behaviour tiene una serie de propiedades:

  • Una lista de business data

  • Una inicial state moverse a

  • Una lista de acciones a realizar

Tenga en cuenta que cuando el initiation behaviour se invoca, se iniciará un flujo y el "FlowInitiated" event se elevará.

Ahora hemos revisado todos los componentes que conforman un flujo único.

Subflows

Lo siguiente a considerar son los segmentos reutilizables del flujo.

Por ejemplo, considere una verificación de sanciones que puede ser requerida desde diferentes lugares dentro del flujo. Podríamos especificar cada sección del flujo por separado y escribir la lógica cada vez, pero idealmente nos gustaría poder reutilizar la lógica común cada vez. Aquí es donde se introduce el concepto de "Subflujo".

Un subflujo es un componente de flujo reutilizable. Es esencialmente lo mismo que un flujo en el sentido de que tiene estados,input behaviours y event behaviours. Sin embargo, un subflujo no tiene vida propia y solo se utiliza como un mecanismo de reutilización y, por lo tanto, DEBE estar contenido dentro de un flujo externo. Al llamar a un subflujo, es muy similar en comportamiento a recibir un event:

intro 6

La clave que debe entender aquí es que en lugar de moverse a un state y luego llamando a una acción como el procesamiento normal anterior, aquí pasamos a un pseudo-state que actúa como un punto de entrada en el subflujo. El "control" del flujo se transfiere entonces al subflujo, en este punto procesará a través de la entrada y event behaviours hasta que alcance un terminal state en el subflujo. Cuando alcanza un terminal state, el control se devolverá al flujo que llama con un resultado del nombre del terminal state. Esto puede ser utilizado para el procesamiento posterior.

Tenga en cuenta que para lograr la reutilización del subflujo en múltiples lugares, cuando un subflujo se coloca dentro de un flujo principal, es state’s se mostrará como "<subflowid> <subflow state "name>" donde <subflowid> es el pseudo-state nombre del flujo de llamada y <subflujo state name> es el nombre del state dentro del subflujo.

Flow Calls

Finalmente, también es posible llamar directamente a un flujo desde otro. En este caso, el control se transfiere al flujo secundario, y esperamos un resultado de ejecución de vuelta. El flujo hijo puede informar que ha alcanzado cualquier state volver al flujo principal. Más comúnmente, esto será cuando un terminal state se alcanza y el flujo secundario ha terminado de procesar, pero también permite la retroalimentación del flujo secundario para estados intermedios antes de que finalice. Esto proporciona una oportunidad para pasar el control de un lado a otro entre el flujo secundario y el flujo principal según sea necesario.

intro 7

Conclusiones

En esta sección, hemos discutido los conceptos principales que componen el Icon payments DSL y cómo se integran. Estos conceptos serán clave en adelante y las siguientes secciones de esta serie de tutoriales comienzan a guiarnos sobre cómo utilizar diferentes de estos para crear nuestra aplicación de pagos.