Vamos fingir que temos um serviço que chama um processo de negócios. Esse processo chamará a camada de dados para criar um objeto do tipo A no banco de dados.
Depois, precisamos chamar novamente outra classe da camada de dados para criar uma instância do tipo B no banco de dados. Precisamos passar algumas informações sobre A para uma chave estrangeira.
No primeiro método, criamos um objeto (estado de modificação) e retornamos seu ID (consulta) em um único método.
No segundo método, temos dois métodos, um (createA) para o salvamento e o outro (getId) para a consulta.
public void FirstMethod(Info info)
{
var id = firstRepository.createA(info);
secondRepository.createB(id);
}
public void SecondMethod(Info info)
{
firstRepository.createA(info);
var key = firstRepository.getID(info);
secondRepository.createB(key);
}
Pelo meu entendimento, o segundo método segue a separação da consulta de comando mais completamente. Mas acho um desperdício e contra-intuitivo consultar o banco de dados para obter o objeto que acabamos de criar.
Como você reconcilia o CQS com esse cenário?
Apenas o segundo método segue o CQS e, em caso afirmativo, é preferível usá-lo neste caso?