Skip to main content

Command | Design Pattern

info

Muito usado em interfaces visuais para desacoplar a UI da lógica de negócios

Artigos e vídeos

Padrão de projetos - Command com C#

Dealing with Duplication in MediatR Handlers · Los Techies

Visão geral

O padrão de design de comando é um padrão de design comportamental (padrão de comunicação entre objetos) que converte uma solicitação ou operação em um objeto com todas as informações necessárias, como qual método chamar, argumentos, etc.

Desacoplar a execução de um comportamento da implementação concreta.

  • CQS

    • Se for command o retorno precisa ser void
      • Command altera o estado

      • Command com retorno gera acoplamento de execução porque você espera um retorno

      • Se torna sequencial o comando

        public void Save(){}
        // Se não der certo, estoura uma exception
    • Se for query precisa ter retorno
      • Não altera o estado, retorna valor
  • O Elemar faz referência a nova forma do command demonstrada no livro Enterprise Integration Pattern, onde o command não executa mais a ação e carrega apenas as propriedades para o handle executar

    • Na arquitetura moderna o comando é no estilo de mensagem

    Command Message - Enterprise Integration Patterns

  • A consequência da execução de um comando é um evento

    • Nessa fala ele complementa que se um command tem um retorno, gera acoplamento de execução(dificuldade de escalar a aplicação) e por isso que o a consequência é um evento. Nisso ele complementa que o uso de WebSocket para dar o retorno seria algo interessante, pois não irá haver o acoplamento
    • Colocando retorno no command você aumenta o seu tempo de requisição porque você precisa esperar o command
      • Normal
      • Acepcional → Impossibilidade de executar o comando
  • Command é ação que você quer expressar do usuário no código.

  • O comando é o comportamento enviado por mensagem

  • Command as Data (ou command as parameter usado nas API’s) é diferente do CQRS

    • Essa classe Command as Data é anêmica, deve ser imutável.
    • A proposta dela é uma fonte de parâmetro.
    • Esse é outro command , diferente do que é usado no CQRS onde executamos a função dentro do command

Sequência dos padrões

CQS → GOF Command → CQRS

info

Command é um DTO pois não traz lógica dentro dele