Episódio 9 — Adicionando Parâmetros: Ações JSON ainda mais poderosas
No episódio anterior, mostramos como você pode definir uma cadeia de tarefas em JSON e executá-las com o TSafeThread e TTaskChain. Mas, como na vida real, tarefas raramente vivem isoladas. Elas precisam de contexto, de entrada, de parâmetros.
Imagine uma tarefa como "EnviarEmail". Sem saber para quem e com qual assunto, ela é só um rótulo vazio. Neste episódio, vamos dar vida a essas ações.
De onde partimos:
{
"acao": "DownloadJSON"
}
E onde vamos chegar:
{
"acao": "EnviarEmail",
"para": "cliente@example.com",
"assunto": "Sua fatura chegou",
"mensagem": "Acesse o portal para visualizar sua fatura."
}
Cada campo extra se torna um parâmetro que a ação pode usar.
Como isso funciona no código?
No momento em que carregamos o JSON e identificamos a ação (campo acao), também repassamos o JSON inteiro para a função que representa essa ação. Ela se encarrega de extrair os campos adicionais que precisa.
procedure ExecutarAcao(const AJson: TJSONObject);
begin
var Acao := AJson.GetValue<string>('acao');
if Acao = 'EnviarEmail' then
begin
var Destinatario := AJson.GetValue<string>('para');
var Assunto := AJson.GetValue<string>('assunto');
var Corpo := AJson.GetValue<string>('mensagem');
EnviarEmail(Destinatario, Assunto, Corpo);
end;
end;
Essa abordagem permite que novas ações sejam adicionadas sem recompilar o sistema, bastando atualizar o JSON e o mapeamento das ações.
Combinando com TSafeThread
Se a execução do EnviarEmail for demorada ou depender de rede, podemos fazer assim:
var Params := TSafeThreadParams.New
.SetOnExecute(
procedure(Context: TThreadContext)
begin
ExecutarAcao(AJson);
end);
TSafeThread.ExecuteThread(Params);
Cada entrada no JSON pode se transformar em uma tarefa dentro de um TTaskChain, com isolamento, cancelamento e controle de erros.
Por que isso é importante?
- Facilita configuração externa do comportamento do app
- Permite edição de fluxos sem mexer no código fonte
- Abre caminho para sistemas plugináveis baseados em descrição declarativa
- Reduz o acoplamento entre lógica e execução
No próximo episódio, vamos adicionar condicionais ao JSON. Isso mesmo: "Se o cliente estiver inativo, envie alerta". Vamos transformar nosso JSON em uma mini linguagem declarativa.
O código continua limpo. A lógica, flexível. E você no controle.
A jornada continua.