Onde isso aparece?
Botões, filas de tarefas e histórico de edição precisam representar ações antes ou depois da execução. Um comando nomeado pode ser validado, registrado, agendado ou retentado.
Exemplo em C#
public interface ICommand
{
Task ExecuteAsync(CancellationToken cancellationToken);
}
public sealed class EnviarRecibo(IEmailSender email, string destinatario) : ICommand
{
public Task ExecuteAsync(CancellationToken cancellationToken) =>
email.EnviarAsync(destinatario, "Seu recibo", cancellationToken);
}A infraestrutura pode executar qualquer ICommand sem conhecer o detalhe do recibo. Para undo, o comando precisa guardar informação suficiente para compensar a operação — nem toda ação é reversível.
Trade-offs
Commands ajudam em filas e auditoria, mas acrescentam tipos e serialização precisa ser segura se comandos cruzarem processos. Não trate automaticamente um comando como transação distribuída. Compare com Chain of Responsibility e Saga, Outbox e Inbox; veja o índice GoF.