Ich habe noch nie von Command-Query-Separation (CQS) gehört, aber es scheint, dass es sich um das Single Responsibility Principle (SRP) handelt, das besagt, dass eine Funktion / Klasse idealerweise für eine Sache und nur eine Sache verantwortlich sein sollte .
Wenn Ihr Befehlscode aus 20 Codezeilen besteht und der Abfragecode aus weiteren 30 Zeilen besteht und sich alle in einem Funktionskörper befinden, verstoßen Sie eindeutig gegen SRP, und ich würde auch von CQS ausgehen, und diese beiden Logikteile sollten voneinander getrennt werden .
Anhand Ihres hypothetischen Beispiels würde ich jedoch höchstwahrscheinlich eine Wrapper-Methode erstellen, die Ihren Befehl und Ihre Abfrage kombiniert, damit DRY an zahlreichen Stellen im Code nicht verletzt wird. Ich würde dies auch nicht als SRP- (und möglicherweise CQS-) Verletzung betrachten, da der Wrapper immer noch nur eine Verantwortung hat: Befehl mit einer Abfrage zu kombinieren und eine Abstraktion auf höherer Ebene zu erstellen, die einfacher zu konsumieren ist.
Ich denke, die Wrapper-Methode ist eine absolut akzeptable Lösung. Um dies zu veranschaulichen, gehen wir noch einen Schritt weiter. Was wäre, wenn Sie 2 Abfragen anstelle von 1 ausführen und dann eine darauf basierende Befehlsaktion ausführen müssten? Ihre 2 Codezeilen wären also 6 oder 8. Was wäre, wenn zwischen einer und der anderen eine Datenüberprüfung / -prüfung durchgeführt würde? Jetzt haben Sie also 15 Codezeilen. Würden Sie zweimal darüber nachdenken, einen Wrapper zu erstellen, der all das erledigt, anstatt diese 15 Zeilen in mehrere Dateien zu streuen?