Non ho mai sentito parlare di Command-Query-Separation (CQS), ma sembra che si riferisca al Single Responsibility Principle (SRP), che afferma che idealmente una funzione / classe dovrebbe essere responsabile di fare una cosa e solo una cosa.
Se il tuo codice di comando è di 20 righe di codice e il codice di query è di altre 30 righe e sono tutte in un corpo di una funzione, chiaramente stai violando SRP e assumerei anche CQS e questi due pezzi di logica dovrebbero essere separati gli uni dagli altri.
Tuttavia, andando con il tuo esempio ipotetico, molto probabilmente creerei un metodo wrapper che combinerebbe il tuo comando e query in modo che DRY non venga violato in numerose parti del codice. Inoltre, non considererei la violazione SRP (e forse CQS), perché il wrapper ha ancora una sola responsabilità: combinare il comando con una query e creare un'astrazione di livello superiore che sia più facile da utilizzare.
Penso che il metodo wrapper sia una soluzione perfettamente accettabile e per illustrare ciò, facciamo del tuo esempio un ulteriore passo avanti. Cosa fare se si dovessero eseguire 2 query invece di 1 e quindi eseguire un'azione di comando in base a tale. Quindi le tue 2 linee di codice sarebbero 6 o 8. Cosa accadrebbe se ci fosse qualche convalida / verifica dei dati tra l'una e l'altra, quindi ora hai 15 linee di codice. Ci penseresti due volte sulla creazione di un wrapper che faccia tutto questo, invece di cospargere quelle 15 righe in più file?