Я раніше не чув про розділення команд-запитів (CQS), але, схоже, це стосувалося б принципу єдиної відповідальності (SRP), де зазначено, що функція / клас в ідеалі повинна відповідати за виконання однієї і однієї тільки речі .
Якщо ваш командний код - 20 рядків коду, а код запиту - ще 30 рядків, і всі вони є в одному функціональному тілі, явно ви порушуєте SRP, і я б припускав, що і CQS, і ці дві частини логіки повинні бути відокремлені один від одного. .
Однак, ідучи з вашим гіпотетичним прикладом, я, швидше за все, створив би метод обгортки, який поєднав би вашу команду та запит, щоб DRY не порушувався в численних місцях коду. Я також не вважав би це порушенням SRP (а може бути, і CQS), оскільки обгортка все ще несе лише одну відповідальність: поєднати команду із запитом та створити абстракцію вищого рівня, яку простіше споживати.
Я думаю, що метод обгортки - цілком прийнятне рішення, і щоб проілюструвати це, давайте зробимо ваш приклад ще на крок. Що робити, якщо вам довелося запустити 2 запити замість 1, а потім виконати командну дію на основі цього. Отже, у ваших 2 рядках коду було б 6 або 8. Що робити, якщо між однією та іншою були деякі перевірки / перевірка даних, то тепер у вас є 15 рядків коду. Чи подумаєте ви двічі над створенням обгортки, яка б все це робила, а не розсипала ці 15 рядків у декілька файлів?