Facciamo finta di avere un servizio che chiama un processo aziendale. Questo processo richiamerà il livello dati per creare un oggetto di tipo A nel database.
Successivamente è necessario richiamare un'altra classe del livello dati per creare un'istanza di tipo B nel database. Dobbiamo passare alcune informazioni su A per una chiave esterna.
Nel primo metodo creiamo un oggetto (modifica stato) e restituiamo il suo ID (query) in un singolo 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);
}
Dalla mia comprensione, il secondo metodo segue la separazione delle query di comando in modo più completo. Ma trovo inutile e controintuitivo interrogare il database per ottenere l'oggetto che abbiamo appena creato.
Come conciliare CQS con un tale scenario?
Solo il secondo metodo segue CQS e in tal caso è preferibile utilizzarlo in questo caso?