O documento discute o uso de sagas, NServiceBus e RabbitMQ para lidar com fluxos de trabalho complexos. Ele explica como sagas podem orquestrar tarefas entre agregações para implementar casos de uso de negócios, como persistir estado e disparar eventos. O documento também discute benefícios de arquiteturas CQRS e como NServiceBus e RabbitMQ podem ser usados para comunicação assíncrona entre domínios e camadas.
7. Domain Services
As ações de um domain service vem dos requirements e
são aprovados pelo domain expert
linguagem ubíqua
8. Eventos
O código não precisa ficar em um único
lugar
O disparo do evento é totalmente
desacoplado do tratamento do evento
Vários tratamentos (handlers) para o
mesmo evento em vários lugares
26. Saga
“Saga é um componente lógico no qual desenvolvedores
destilam peças de lógica de negócios. Mais
precisamente, a saga (em cooperação com o bus)
orquestra todas as tarefas que precisam ser realizadas
para implementar um caso de uso”
Dino Esposito, Architecting Applications for the Enterprise
27.
28.
29. Saga
•Pode ser um Guid
•Pode ser o ID da agregação da qual se trata a saga
•Pode ser uma combinação de valores que é único no contexto
Sagas precisam ser identificadas por
um único ID
•Persistência é responsabilidade do Bus
•Estado de agregações associadas devem ser persistidas
Sagas podem ser persistidas
•Mero executor de tarefas obtendo qualquer dado do
comando que inicia a sagaSagas podem ser stateless
30. Como estender a solução?
Escreva uma nova Saga
Escreva um novo Handler
Registre no Bus
31. Referências
Architecting Applications for the
Enterprise, Dino Esposito
Patterns, Principles, and Practices of
Domain-Driven Design, Scott Millett
Pluralsight
Scaling Applications with Microservices,
MassTransit, and RabbitMQ
Scaling Applications with Microservices
and NServiceBus