Episódio 5 - Engine JSON: carregamento dinâmico de tarefas
No episódio anterior, organizamos nossas tarefas como plugins reaproveitáveis e flexíveis. Agora é hora de darmos o próximo passo: permitir que as tarefas sejam definidas de forma externa, por exemplo, por um arquivo JSON.
Essa mudança permite que o comportamento do sistema seja alterado sem recompilar o código. Um operador, um script externo ou mesmo uma aplicação cliente pode definir uma sequência de tarefas com seus parâmetros, erros esperados e condições de continuidade.
✅ Por que usar JSON?
- Separar dados da lógica: mantém o código limpo e reutilizável
- Permitir reconfiguração sem recompilar
- Fácil de validar, logar e versionar
- Fácil de integrar com interfaces externas
Exemplo de definição via JSON:
[
{ "task": "DownloadJSON", "params": { "url": "https://..." }, "continueOnError": false },
{ "task": "ProcessJSON", "params": {}, "continueOnError": true },
{ "task": "DownloadImage", "params": { "timeout": 1000 }, "continueOnError": false }
]
Esse arquivo pode ser carregado na inicialização e interpretado por uma engine que:
- Localiza o plugin correspondente a cada tarefa
- Injeta os parâmetros informados
- Controla a execução e continuação conforme o erro
Estrutura da engine:
- PluginRegistry: onde os plugins são registrados com um identificador (ex: "DownloadJSON")
- JSONLoader: carrega e interpreta o JSON, construindo dinamicamente uma instância de
TTaskChain - ParamMapper: aplica os parâmetros JSON ao plugin de forma segura
Vantagens reais
- Aplicativo mais genérico
- Scripts de tarefas compartilháveis
- Integração com interfaces de configuração (Web, REST, Mobile)
- Permite criar uma linguagem de orquestração
Nos próximos episódios:
- Criaremos uma interface simples para editar os JSONs
- Mostraremos como registrar dinamicamente os plugins
- Falaremos de fallback, tempo de execução, condicionais
- E como validar uma cadeia de execução antes de rodar
O que era uma tarefa virou uma linguagem declarativa de execução. Bem-vindo à ideia de uma mini-orquestradora local para Delphi.