Facciamo finta che abbiamo un servizio che chiama un processo aziendale. Questo processo chiamerà sul livello dati per creare un oggetto di tipo A nel database.
Successivamente dobbiamo chiamare di nuovo su un'altra classe del livello dati per creare un'istanza di tipo B nel database. Abbiamo bisogno di passare alcune informazioni su A per una chiave straniera.
Nel primo metodo creiamo un oggetto (modifica lo stato) e restituiamo il suo ID (query) in un unico metodo.
Nel secondo metodo abbiamo due metodi, uno (createA) per il salvataggio e l'altro (getId) per la query.
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);
}
Da quanto ho capito, il secondo metodo segue in modo più completo la separazione delle query dei comandi. Ma trovo inutile e contro-intuitivo interrogare il database per ottenere l'oggetto che abbiamo appena creato.
Come si concilia il CQS con uno scenario simile?
Solo il secondo metodo segue CQS e in caso affermativo è preferibile utilizzarlo in questo caso?