Cqrs

marcelo_serpa 141 views 15 slides Mar 09, 2018
Slide 1
Slide 1 of 15
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15

About This Presentation

.


Slide Content

CQRS
Marcelo Serpa

Olá, eu sou Marcelo
Desenvolvedor de software na Ilegra
Microservices / Java8
Formado no curso de ADS na FTEC
Apaixonado por desenvolvimento de software
Tenho interesse em Design de Software e Cloud Native
Além de programação, gosto de card games



Blog https://medium.com/@marceloserpa
Github https://github.com/marceloserpa
Twitter https://twitter.com/_marceloserpa

CQS - tudo começou com Meyer
Bertrand Meyer
Linguagem Eiffel
Autor do livro Object-Oriented Software Construction
Design by Contract
Command Query Separation

CQS
Commands operações que realizam alguma mutação no estado de um
objeto. Não devem retornar nenhum resultado.

Queries operações de leitura do estado, esse tipo de operação não deve
realizar nenhum tipo de mutação sendo assim livre de side-effects.

Exemplo de uma classe aplicando CQS
public class ProdutoService {

public void salvar(Produto produto){
// realizar alguma mutação de estado
}

public Optional<Produto> buscarPeloID(Long id){
// consulta algum dados
}

public Produto editar(Produto produto){
// PROBLEMA: realiza uma mutação e ainda retorna um valor
}

}

CQRS
Greg Young
Command Query Responsability Segregation
Definindo como uma extensão do CQS
Diferença: Command e Queries são
separados em objetos

Exemplo Aplicando CQRS

public class ProdutoCommandService {

public void salvar(Produto produto){
// realizar alguma mutação de estado
}

}




public class ProdutoQueryService {

public Produto consultarPeloNome(String termo){
// pesquisa dados
}

}

Segundo Greg Young
“O padrão, embora não seja muito interessante em si, torna-se extremamente
interessante quando visto de um ponto de vista arquitetural.”

Falando um pouco sobre CRUDs...
Modelo de domínio iguais para
leitura e escrita
Necessidades diferentes entre
modelos ( Exemplo: Validação )
Estrutura de armazenamento de
dados iguais.

Aplicando CQRS
Command
-Representa uma tarefa
-Muta o estado de algum dado
-Realiza validações
-Executa regra de negócio
-Não expõe o estado interno
Query
-Recupera os dados
-Modela de acordo com a necessidade
de representação

Banco de dados ACID




Mecanismos e padrões
●Primary keys
●Integridade de dados
●Integridade relacional (FK)
●Normalização
“Otimizado para escrita”

Problemas de escalidade e o teorema CAP
Considerando um ambiente distribuído.
Consistência: garantia de leitura do dado mais
recente.
(A) Disponibilidade: sempre entrega o dado
para o usuário
Tolerância a (P)articionamento: banco de
dados distribuído com replicação.

CQRS + Event Sourcing = Consistência eventual

Prós
●Possibilita modelar de forma
independente a escrita da leitura
●Utilizar o banco mais otimizado para
cada tarefa
●Performance as duas operações
●Escalabilidade

Contras
●Aumenta a complexidade do sistema
●Deve ser usado em cenários específicos
●Pode levantar questões em relação a
consistência eventual

https://medium.com/@marceloserpa
https://github.com/marceloserpa
https://twitter.com/_marceloserpa