TheCodeNaked

Além do 'if/else': Como Dicionários de Ações abrem caminho para Padrões Avançados de Design (Copy)

De uma simples substituição de condicionais para estruturas robustas como State, Command e Plugin Pattern.

Descubra como o uso de dicionários de ações pode ser a base para padrões clássicos de design como State Pattern, Command Pattern e Sistemas Plugináveis - criando aplicações mais flexíveis, modulares e descoladas.

Introdução

No artigo anterior, vimos como dicionários de ações (ou maps de funções) são uma forma elegante de substituir estruturas tradicionais de if e else, melhorando legibilidade e extensibilidade.

Mas essa técnica vai muito além.

Ao entender seu potencial, você pode estruturar seu código com base em padrões consagrados como:

  • State Pattern
  • Command Pattern
  • Plugin Pattern / Modularização Dinâmica

Se você deseja criar sistemas flexíveis, extensíveis e fáceis de evoluir, esse artigo é para você.


State Pattern - Comportamento baseado em estado

📌 O problema: Um objeto muda seu comportamento dependendo de seu estado interno. Ao invés de condicional após condicional...

if Estado = 'Autenticado' then
  AcessarDashboard
else if Estado = 'Visitante'' then
  MostrarLogin;

... podemos representar cada estado como um objeto independente com seu próprio comportamento.

🪄 A solução com Dicionário:

Estados := TDictionary<string, TProc>.Create;
Estados.Add('Autenticado', AcessarDashboard);
Estados.Add('Visitante', MostrarLogin);

Estados[estadoAtual]();

Agora, o comportamento não está mais acoplado ao controle de fluxo, e sim mapeado diretamente ao estado. O código fica mais limpo, estável e pronto para crescer.

🧠 Vantagens:

  • Lógica por estado fica encapsulada.
  • Facilita a adição de novos estados.
  • Reduz ramificações e duplicações.

🚀 Use quando:

  • Implementar máquinas de estado.
  • Lidar com fluxos complexos (ex: processos de compra, autenticação, validação).

🔌 Plugin Pattern - Extensibilidade com registro dinâmico

📌 O problema: Você quer encapsular ações como objetos para poder:

  • Agendá-las.
  • Reexecutá-las.
  • Revertê-las (undo/redo).
  • Combiná-las em sequência.

Ao invés de:

if Acao = 'Salvar' then
  SalvarArquivo;

🪄 Solução com Dicionário:

Comandos := TDictionary<string, TProc>.Create;
Comandos.Add('Salvar', SalvarArquivo);
Comandos.Add('Imprimir', ImprimirDocumento);

Comandos[NomeDoComando](); // Executa dinamicamente

💎 Expansão:

Você pode registrar essas ações em tempo de execução, armazenando histórico, ou mesmo criar macros de comandos.

🧠 Vantagens:

  • Ações podem ser tratadas como dados.
  • Ideal para interfaces (menus, botões, teclas de atalho).
  • Facilita histórico, desfazer/refazer, logo.

🚀 Use quando:

  • Criar menus e botões dinamicamente.
  • Implementar sistemas de histórico.
  • Reutilizar ou encadear ações.

Conclusão

O uso de dicionários de ações não é apenas uma alternativa moderna ao if e else. Ele representa uma forma de pensar diferente, onde o comportamento é tratado como dado e a lógica é descentralizada.

A partir desse padrão simples, você pode construir:

  • Estados independentes que controlam fluxos complexos.
  • Comandos reutilizáveis com histórico e automação.
  • Sistemas modulares e plugináveis com registro dinâmico.
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