Skip to content

LucasDiasJorge/Orchestrator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Orchestrator - Exemplo de Saga Orchestrator em C#

Este repositorio demonstra um fluxo de orquestracao de Saga para processamento de pedido, com foco em:

  • execucao sequencial de comandos
  • controle de estado da saga
  • rollback (compensacao) em caso de falha
  • estrutura de projeto organizada por responsabilidade

Visao Geral

O projeto simula um processo de pedido com quatro etapas:

  1. Criar pedido
  2. Reservar estoque
  3. Processar pagamento
  4. Enviar confirmacao

Se alguma etapa falhar, o orquestrador executa compensacoes em ordem reversa para desfazer as etapas ja concluidas.

Estrutura do Repositorio

.
|- README.md
`- Orchestrator/
	|- Orchestrator.csproj
	|- Orchestrator.sln
	`- src/
		|- App/
		|  `- Program.cs
		|- Application/
		|  `- Commands/
		|     |- CreateOrderCommand.cs
		|     |- ReserveStockCommand.cs
		|     |- ProcessPaymentCommand.cs
		|     `- SendConfirmationCommand.cs
		|- Contracts/
		|  `- ISagaCommand.cs
		|- Domain/
		|  |- Models/
		|  |  `- OrderContext.cs
		|  `- State/
		|     `- SagaState.cs
		`- Orchestration/
			|- OrderSagaOrchestrator.cs
			`- SagaStateMachine.cs

Arquitetura

  • App: ponto de entrada da aplicacao e cenarios de execucao.
  • Application/Commands: etapas de negocio da saga, cada uma com ExecuteAsync e CompensateAsync.
  • Contracts: contratos comuns (interface de comando da saga).
  • Domain: modelos e estados de dominio usados na orquestracao.
  • Orchestration: regras de coordenacao do fluxo e maquina de estados.

Documentacao detalhada:

  • docs/ARCHITECTURE.md: detalhes de componentes e fluxo da saga.
  • docs/EXTENSIBILITY.md: como evoluir o projeto com novos comandos.

Como Executar

Pre-requisitos:

  • .NET SDK 10.0 (ou versao compativel com net10.0)

Comandos a partir da raiz do repositorio:

dotnet restore Orchestrator/Orchestrator.csproj
dotnet run --project Orchestrator/Orchestrator.csproj

O Program.cs executa dois cenarios:

  • cenario de sucesso
  • cenario de falha em estoque, acionando compensacao

Comportamento Esperado

  • Em sucesso: estado da saga vai de Pending -> Running -> Done.
  • Em falha: estado da saga vai de Pending -> Running -> Compensating -> Failed.
  • As compensacoes ocorrem em ordem reversa da execucao dos comandos.

Pontos de Design

  • Orquestracao explicita em uma unica classe (OrderSagaOrchestrator).
  • Rastreio de comandos executados com pilha para rollback reverso.
  • Validacao de transicoes com SagaStateMachine para evitar estados invalidos.
  • Contexto compartilhado (OrderContext) para transportar dados entre etapas.

Proximos Passos Sugeridos

  • adicionar logs estruturados (ex.: ILogger)
  • criar testes unitarios para comandos, maquina de estados e orquestrador
  • adicionar persistencia de estado da saga para cenarios reais
  • trocar simulacoes por integracoes reais (estoque, pagamento, notificacao)

About

Saga Orchestrator for order processing

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages