🤩 Episódio 8 — Programando sem recompilar: Execução declarativa com JSON e TSafeThread
Imagine um sistema em que você define o que precisa ser feito por configuração, e não por código compilado. Algo como:
[
{ "acao": "BaixarJSON", "url": "https://exemplo.com/dados.json" },
{ "acao": "ProcessarDados" },
{ "acao": "BaixarImagem", "url": "https://exemplo.com/imagem.jpg" }
]
Esse JSON vira uma cadeia de tarefas, executadas uma a uma com todos os benefícios da TSafeThread e TTaskChain:
- UI responsiva
- Erros tratados com callbacks
- Cancelamento possível
- Execução controlada
🤔 Mas por que JSON?
Porque representar lógica em dados permite:
- Alterar comportamentos sem recompilar
- Criar sistemas plugináveis
- Executar tarefas enviadas por um servidor
- Criar testes automatizados de fluxos
- Desenvolver interfaces low-code ou no-code
⚖️ Como funciona?
Você precisa de dois elementos:
- Registrador de Ações (um dicionário)
- Mapeia
BaixarJSONpara uma função Delphi que cria umaISafeThreadParams
- Mapeia
- Interpretador de JSON
- Lê o arquivo e executa cada ação via
TTaskChain.AddTask(...)
- Lê o arquivo e executa cada ação via
🧠 A arquitetura
[ JSON de Ações ]
↓
[ Interpretador ]
↓
[ Dicionário de Funções ]
↓
[ TSafeThreadParams ]
↓
[ TTaskChain ]
E tudo isso sem precisar escrever case, if, TTask.Run ou try...except no seu formulário.
🛠 Exemplo de ação mapeada:
RegisterAction('BaixarJSON',
procedure(const Params: TJSONValue; const TaskName: string; OnSuccess: TProc; OnError: TErrorCallback)
begin
var URL := Params.GetValue<string>('url');
var Thread := TSafeThreadParams.New
.SetOnExecute(
procedure(Context: TThreadContext)
begin
var JSON := TNetHTTPClient.Create(nil).Get(URL).ContentAsString;
// Armazene como quiser (campo, cache, arquivo...)
if Assigned(OnSuccess) then OnSuccess();
end)
.SetOnError(OnError);
TSafeThread.ExecuteThread(Thread);
end
);
🧪 O que ganhamos com isso?
- Criamos uma máquina de execução assíncrona declarativa
- Permite alterações externas (ideal para sistemas configuráveis)
- Pode ser estendida com novas ações
- Cria um framework leve, mas poderoso
Nos próximos episódios:
- Como criar ações dinâmicas plugináveis
- Como integrar com REST, banco de dados, relatórios e notificações
- Como criar uma interface visual para montar fluxos
Esse é o ponto em que o seu sistema deixa de ser um programa fechado e vira uma plataforma viva.
“JSON virou o novo bytecode das aplicações modernas.”
E a TSafeThread agora tem uma linguagem para comandá-la.
Vamos para o Episódio 9?