Nie słyszałem wcześniej o rozdzielaniu zapytań i poleceń (CQS), ale wygląda na to, że odnosi się to do zasady pojedynczej odpowiedzialności (SRP), która stwierdza, że funkcja / klasa idealnie powinna odpowiadać za wykonanie jednej rzeczy i tylko jednej rzeczy .
Jeśli twój kod komendy składa się z 20 linii kodu, a kod zapytania to kolejne 30 linii i wszystkie są w jednym ciele funkcji, najwyraźniej naruszasz SRP i zakładam, że również CQS, i te dwie logiki powinny być od siebie oddzielone .
Jednak idąc za twoim hipotetycznym przykładem, najprawdopodobniej stworzę metodę otoki, która połączy twoje polecenie i zapytanie, aby DRY nie zostało naruszone w wielu miejscach w kodzie. Nie uważałbym również, że jest to naruszenie SRP (i być może CQS), ponieważ opakowanie nadal ma tylko jedną odpowiedzialność: połączyć polecenie z zapytaniem i utworzyć abstrakcję wyższego poziomu, która jest łatwiejsza do konsumpcji.
Myślę, że metoda otoki jest rozwiązaniem całkowicie akceptowalnym. Aby to zilustrować, przejdźmy o krok dalej. Co by było, gdybyś musiał uruchomić 2 zapytania zamiast 1, a następnie wykonać na tej podstawie polecenie. Tak więc twoje 2 linie kodu miałyby 6 lub 8. Co gdyby było pewne sprawdzanie / sprawdzanie danych między jednym a drugim, więc teraz masz 15 linii kodu. Czy pomyślałbyś dwa razy o stworzeniu opakowania, które to wszystko robi, zamiast posypywania tych 15 wierszy wieloma plikami?