Trước đây tôi chưa từng nghe về Phân tách truy vấn lệnh (CQS), nhưng có vẻ như nó sẽ liên quan đến Nguyên tắc trách nhiệm duy nhất (SRP), trong đó nêu rõ rằng một chức năng / lớp lý tưởng chỉ chịu trách nhiệm thực hiện một việc và một việc duy nhất .
Nếu mã lệnh của bạn là 20 dòng mã và mã truy vấn là 30 dòng khác và tất cả chúng nằm trong một thân hàm, rõ ràng bạn đang vi phạm SRP và tôi cũng giả sử CQS và hai đoạn logic đó phải được tách biệt với nhau .
Tuy nhiên, đi với ví dụ giả thuyết của bạn, rất có thể tôi sẽ tạo một phương thức trình bao bọc kết hợp lệnh và truy vấn của bạn để DRY không bị vi phạm ở nhiều vị trí trong mã. Tôi cũng sẽ không coi đây là vi phạm SRP (và có thể là CQS), vì trình bao bọc vẫn chỉ có một trách nhiệm: kết hợp lệnh với truy vấn và tạo mức độ trừu tượng cao hơn, dễ tiêu thụ hơn.
Tôi nghĩ rằng phương pháp trình bao bọc là giải pháp hoàn toàn chấp nhận được và để minh họa điều đó, hãy đưa ví dụ của bạn tiến thêm một bước. Điều gì sẽ xảy ra nếu bạn phải chạy 2 truy vấn thay vì 1 và sau đó thực hiện một hành động lệnh dựa trên đó. Vì vậy, 2 dòng mã của bạn sẽ là 6 hoặc 8. Điều gì xảy ra nếu có một số xác thực / kiểm tra dữ liệu giữa cái này và cái kia, vì vậy bây giờ bạn có 15 dòng mã. Bạn có nghĩ hai lần về việc tạo một trình bao bọc thực hiện tất cả điều đó, thay vì rắc 15 dòng đó vào nhiều tệp không?