TheCodeNaked

Paralelismo - Episódio 19 (Copy)

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 TJSONValue com 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.

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