Episódio 19 — A autonomia da cadeia: plugins que se registram sozinhos
Até aqui, vimos como as tarefas podem ser organizadas em sequências lógicas com TTaskChain, e como elas podem ser descritas em JSON para facilitar a parametrização externa e reduzir recompilações. Agora chegou a hora de dar mais um salto: permitir que as próprias tarefas se registrem dinamicamente, como plugins.
Imagine isso:
- Você não precisa mais declarar estaticamente todas as tarefas no código
- Basta adicionar uma unit com uma tarefa nova, e ela se registra sozinha
- O interpretador JSON nem precisa saber quem são essas tarefas com antecedência
Sim, estamos falando de auto-registro de comandos.
✨ O que é um sistema de comandos plugináveis?
É um mecanismo onde as ações executadas não são codificadas diretamente, mas sim descritas por nomes. Cada nome está associado a um comando real (um método, uma tarefa, uma rotina) que foi registrado dinamicamente. É como um dicionário de comandos:
CommandRegistry['DownloadImage'] := procedure(params: TJSONValue) begin ... end;
CommandRegistry['ResizeImage'] := procedure(params: TJSONValue) begin ... end;
Mas em vez de registrar manualmente, as units fazem isso automaticamente quando são carregadas.
🛠 Como funciona o auto-registro?
Basta uma classe helper ou um singleton global com um método como:
class procedure RegisterCommand(const Name: string; Proc: TCommandProc);
E na inicialização de cada unit, fazemos:
initialization
CommandRegistry.Register('DownloadImage', MyDownloadProc);
Se você carregar essa unit (via uses ou dinamicamente), o comando fica disponível.
📆 E como isso se conecta com TSafeThread e TTaskChain?
Simples: o interpretador JSON vai ler a lista de tarefas, e para cada uma, buscar no registro se existe uma tarefa correspondente. Se existir, ele executa:
{
"task": "DownloadImage",
"params": {
"url": "https://picsum.photos/300/200"
}
}
Cada comando registrado deve ser capaz de:
- Receber um
TJSONValuecom parâmetros - Executar uma lógica assíncrona usando
TSafeThread - Notificar sucesso ou erro para o
TTaskChain
🤖 Benefícios reais
- Permite adicionar tarefas sem recompilar tudo
- Facilita testes e extensões por equipe ou clientes
- Transforma sua aplicação em uma pequena plataforma
- Prepara o caminho para sistemas com plugins reais (DLLs ou pacotes BPL)
✅ Próximos passos
No próximo episódio, vamos:
- Organizar o registro dos comandos em uma unit central
- Separar a lógica de execução da lógica de interpretação
- Criar um mini framework pluginável
Estamos começando a transformar um modelo elegante em um motor flexível de execução. Vamos em frente.