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