¿Cómo manejo las entradas de una fuente externa?
Dentro del DSL, las entradas de una fuente externa se modelan como: respuestas de dominio externo o instrucciones. Para cada uno de estos, la clase de dominio del modelo proporciona métodos que permiten que las respuestas se envíen de vuelta al dominio.
Por ejemplo, al utilizar un dominio externo, podemos gestionar una respuesta invocando el handle(..) método proporcionado por el puerto de entrada del dominio externo:
XYZDomain.externalDomain().handle(new ExternalDomainResponseInput());
Tenga en cuenta que el nombre del modelo es "XYZ" y el dominio externo se llama "External Domain".
El resultado de la handle(..) la llamada al método es un CompletableFuture<Done>, que se completa una vez que el flujo ha aplicado la entrada al estado actual.
El Done el objeto, que se devuelve después de que se complete el futuro, proporciona una vista detallada de cuál fue el resultado final de aplicar la entrada:
@AllArgsConstructor
@Getter
public class Done implements CborSerializable {
private final String aggregateId;
private final String aggregateStatus;
private final String commandName;
private final Result result;
public enum Result {
EXECUTED, DUPLICATE, UNEXPECTED, ERROR
}
}
De particular interés aquí es el Result campo enum, que comunica el resultado del intento de enviar la respuesta de vuelta al dominio. Los valores posibles son:
-
EXECUTED: significa que la entrada se aplicó con éxito al estado actual, pero no ofrece garantías sobre las operaciones resultantes (acciones, notificaciones, funciones de dominio) -
DUPLICATE: significa que la entrada fue considerada un duplicado comercial de una entrada previamente gestionada y, por lo tanto, no se aplicó al estado actual. -
UNEXPECTED: significa que la entrada fue considerada inapropiada para el estado actual del flujo y, por lo tanto, no se aplicó al estado. -
ERROR: significa que se encontró un problema al ejecutar una de las operaciones triggered al aplicar la entrada (acciones, notificaciones, funciones de dominio)
En términos generales, a menos que tenga requisitos específicos-por ejemplo, generar un evento del sistema ante ciertas respuestas duplicadas-puede ignorar el resultado de aplicar la entrada y considerar la operación un éxito (siempre que el futuro en sí no falle).