O que é : Command Query Separation

O que é Command Query Separation?

O Command Query Separation (CQS) é um princípio de design de software que propõe separar as operações que alteram o estado de um sistema (comandos) das operações que apenas consultam o estado do sistema (consultas). Esse princípio foi introduzido por Bertrand Meyer em seu livro “Object-Oriented Software Construction” e tem como objetivo melhorar a clareza e a manutenibilidade do código.

Comandos e Consultas

No contexto do CQS, um comando é uma operação que realiza uma alteração no estado do sistema, como inserir, atualizar ou excluir dados. Por outro lado, uma consulta é uma operação que apenas recupera informações do sistema, sem alterar seu estado. A separação clara entre comandos e consultas ajuda a evitar efeitos colaterais indesejados e torna o código mais previsível.

Vantagens do CQS

Uma das principais vantagens do CQS é a simplificação do código. Ao separar comandos de consultas, torna-se mais fácil entender e dar manutenção ao código, pois cada tipo de operação tem sua responsabilidade bem definida. Além disso, o CQS promove a reutilização de código, uma vez que consultas podem ser reutilizadas em diferentes partes do sistema.

Implementação do CQS

Para implementar o CQS em um sistema, é necessário criar métodos separados para comandos e consultas. Os métodos de comando devem realizar as alterações no estado do sistema e não devem retornar nenhum valor. Já os métodos de consulta devem apenas recuperar informações e não devem alterar o estado do sistema.

Exemplo de Código

Vamos ver um exemplo simples de como implementar o CQS em uma classe Java:

“`java
public class ProdutoService {

public void adicionarProduto(Produto produto) {
// Lógica para adicionar um produto ao sistema
}

public Produto buscarProdutoPorId(int id) {
// Lógica para buscar um produto pelo ID
return produto;
}
}
“`

No exemplo acima, o método `adicionarProduto` é um comando, pois adiciona um produto ao sistema sem retornar nenhum valor. Já o método `buscarProdutoPorId` é uma consulta, pois retorna um produto com base no ID fornecido.

Considerações Finais

O Command Query Separation é um princípio de design de software que promove a separação clara entre operações que alteram o estado do sistema e operações que apenas consultam o estado. Ao seguir esse princípio, é possível melhorar a clareza, a manutenibilidade e a reutilização do código. Portanto, ao desenvolver um sistema, considere aplicar o CQS para obter um código mais limpo e organizado.