Ho cercato per settimane una risposta a questa domanda, che sembra essere comune a quasi tutte le applicazioni e quindi un problema in prima linea in CQS.
CQS indica che una funzione dovrebbe:
- Cambia stato e restituisci void (comando) o
- Non modificare nulla e restituire un risultato (query)
Quindi, supponiamo di voler creare una nuova entità di dati, mantenerla nel database, quindi emettere una notifica dell'ID auto-incrementato.
Per prima cosa, creiamo l'oggetto - a questo punto non ha un identificatore univoco. Quindi lo salviamo nel database, che genera un identificatore univoco tramite il campo ID auto-incrementato. Il risultato dell'esecuzione della query viene restituito all'applicazione, restituendo la riga del database risultante, che può quindi essere interrogata per determinare l'ID. (qv PostgreSQL INSERT ... RETURNING )
Dato che stiamo inserendo l'insert come comando (è è che modifica l'ID sul nostro oggetto da null
a "qualcosa"), e i comandi devono restituire void, come determiniamo l'ID generato?