En CQRS / ES, se envía un comando desde el cliente al servidor y se enruta al controlador de comandos apropiado. Ese controlador de comandos carga un agregado desde su repositorio, llama a algún método y lo guarda de nuevo en el repositorio. Se generan eventos. Un controlador de eventos / saga / administrador de procesos puede escuchar estos eventos para emitir comandos.
Entonces, los comandos (entrada) producen eventos (salida), que luego pueden retroalimentar al sistema más comandos (entrada). Ahora, ¿es una práctica común que un comando no emita ningún evento, sino que ponga en cola otro comando? Tal enfoque podría usarse para forzar la ejecución en un proceso externo.
EDITAR:
El caso de uso específico que tengo en mente es el procesamiento de los detalles de pago. El cliente envía un PayInvoicecomando, cuya carga incluye los detalles de la tarjeta de crédito del usuario. El PayInvoiceHandlerpasa un MakeInvoicePaymentcomando a un proceso separado, que es responsable de interactuar con la pasarela de pago. Si el pago se realiza correctamente, InvoicePaidse genera un evento. Si por alguna razón el sistema falla después de que el PayInvoicecomando persiste pero antes de que el MakeInvoicePaymentcomando persista, podemos rastrearlo manualmente (no habrá pasado ningún pago). Si el sistema falla después de que el MakeInvoicePaymentcomando persiste pero antes deInvoicePaidel evento persiste, es posible que tengamos una situación en la que se cargue a la tarjeta de crédito del usuario pero la factura no se marque como pagada. En ese caso, la situación tendría que ser investigada manualmente y la factura marcada manualmente como pagada.