¿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 sean enviadas 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 actual state.
El Done el objeto, que se devuelve una vez que se completa 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 actual state, pero no ofrece garantías sobre las operaciones resultantes (acciones,notifications,domain functions) -
DUPLICATE: significa que la entrada fue considerada un duplicado comercial de una entrada previamente gestionada y, por lo tanto, no se aplicó a la actual.state -
UNEXPECTED: significa que la entrada se consideró inapropiada para el actual state del flujo y, por lo tanto, no se aplicó a la state -
ERROR: significa que se encontró un problema al ejecutar una de las operaciones triggered al aplicar la entrada (acciones,notifications,domain functions)
En términos generales, a menos que tenga requisitos específicos-e.j. aumentando un system event sobre 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).