TheCodeNaked

Paralelismo - Episódio 9 (Copy)

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 isolamentocancelamento 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.

Sobre o autor

TheCodeNaked

No TheCodeNaked, programar é consequência, não ponto de partida. Antes do código, vem a dúvida, a análise, o contexto. Não seguimos fórmulas — questionamos. Criar software é pensar com clareza. O resto é só digitação.

TheCodeNaked

Criar com clareza. Codificar com intenção.

TheCodeNaked

Ótimo! Você se inscreveu com sucesso.

Bem-vindo de volta! Você acessou com sucesso.

Você se inscreveu com sucesso o TheCodeNaked.

Sucesso! Verifique seu e-mail para acessar com o link mágico.

As suas informações de faturamento foram atualizadas.

Seu pagamento não foi atualizado