BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Exemplo de CQRS usando o framework Axon

Exemplo de CQRS usando o framework Axon

Favoritos

Command Query Responsibility Segregation (CQRS) é um meio de construir software que separa a parte que muda de estado da parte que consulta o estado. O Axon é um framework Java que disponibiliza implementações dos mais importantes blocos de construção, exemplo os agregados, comandos e barramento de eventos, como também repositórios para ajudar desenvolvedores a aplicar o padrão arquitetural CQRS enquanto constroem aplicações. Dadepo Aderemi escreveu uma série de posts explicando CQRS do ponto de vista conceitual e explora os blocos de construção que o Axon Framework pode disponibiliza para construir uma pequena aplicação CQRS de exemplo.

Para Aderemi, desenvolvedor de software na Trifork em Amsterdã, a parte mais importante no lado do comando de CQRS inclui:

  • Comandos: que capturam a intenção do que precisa acontecer. No Axon, não é necessário que os POJOs implementem qualquer interface.
  • Manipuladores de comando: que atuam no envio de comandos. No Axon eles podem ser criados pela implementação de uma interface ou por anotação.
  • Barramento de comandos: que comanda rotas para os respectivos manipuladores de comandos. O Axon vem com quatro implementações da qual Aderemi usa um simples barramento assíncrono para expedição de comandos. Outra implementação é o barramento assíncrono para processamento de comandos assíncronos.

Aderemi observa que o conceito de Domain-Driven Design (DDD) muitas vezes aparece em discussões sobre CQRS, e ele acredita que o entendimento básico de DDD é benéfico. Dois importantes conceitos são Agregado, um conceito lógico definindo uma coleção de objetos de domínio atômicos e todo coeso, e raiz do agregado que se refere à entidade, no total, contendo os outros objetos e responsável por garantir que o agregado está sempre em uma raiz agregada de estado consistente e coesa, que se refere à entidade, no total, contendo os outros objetos e responsável por garantir que o agregado está sempre em um estado consistente e coeso.

No lado da busca as partes mais importantes incluem:

  • Eventos de domínio: que representam algo que aconteceu no passado e criado por mudanças de estado no domínio, mudanças iniciadas por comandos e seus controladores.
  • Barramento de eventos: que transportam os eventos para o lado da busca. Apesar do Axon possuir uma dupla implementação, Aderemi usa a mais simples.
  • Controladores de evento: que escutam eventos e usam a informação para uma reflexão do estado da aplicação no lado da busca. No Axon eles são definidos com uma anotação.

Através do uso de Event Sourcing, em vez de armazenar o estado atual, todas as alterações de estado são armazenadas, e o estado atual é recuperado através da recuperação de todos os eventos anteriores a um estado inicial. O Axon proporciona várias implementações de uma interface de repositório de eventos incluindo NoSQL e banco de dados relacionais. As versões posteriores da aplicação de demonstração de Aderemi implementam uma estratégia de persistência de eventos em fila no abastecimento de eventos.

O Axon proporciona uma infraestrutura de testes com uma abordagem que segue as ideias do Behaviour-Driven Development (BDD), que foram incluídos na aplicação de demonstração de Aderemi. Observou-se que a infraestrutura de testes foca em eventos publicados em reação ao envio de comandos, evitando assim, uma dependência sobre a implementação da API.

Aderemi publicou sua aplicação de exemplo, exploringCQRSwithAxon, no Github. Um post está sendo escrito para apresentar as conclusões sobre o uso de CQRS como um arquitetura, além de apresentar como o Axon pode auxiliar este processo.

Criado por Allard Bujize, que trabalha para a Trifork, o framework Axon é um produto open source cuja terceira versão está planejada para ser lançada no primeiro quadrimestre de 2016.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT