ฉันไม่เคยได้ยินเกี่ยวกับ Command-Query-Separation (CQS) มาก่อน แต่ดูเหมือนว่ามันจะเกี่ยวข้องกับ Single Responsibility Principle (SRP) ซึ่งระบุว่าหน้าที่ / คลาสควรมีหน้าที่รับผิดชอบในการทำสิ่งหนึ่งและสิ่งเดียวเท่านั้น .
หากรหัสคำสั่งของคุณคือ 20 บรรทัดของรหัสและรหัสแบบสอบถามเป็นอีก 30 บรรทัดและพวกเขาทั้งหมดในฟังก์ชั่นเดียวอย่างชัดเจนว่าคุณกำลังละเมิด SRP และฉันจะถือว่า CQS เช่นกันและตรรกะทั้งสองชิ้นควรแยกออกจากกัน .
อย่างไรก็ตามด้วยตัวอย่างสมมุติของคุณฉันน่าจะสร้างวิธีการห่อหุ้มที่จะรวมคำสั่งและแบบสอบถามของคุณเพื่อให้ DRY ไม่ได้ถูกละเมิดในหลาย ๆ ที่ในรหัส ฉันจะไม่คิดว่านี่เป็นการละเมิด SRP (และอาจจะเป็น CQS) เพราะเสื้อคลุมยังมีความรับผิดชอบเพียงอย่างเดียว: การรวมคำสั่งกับแบบสอบถามและสร้างสิ่งที่เป็นนามธรรมในระดับที่สูงขึ้นซึ่งง่ายต่อการใช้งาน
ฉันคิดว่าวิธีการห่อหุ้มเป็นทางออกที่ยอมรับอย่างสมบูรณ์และเพื่อแสดงให้เห็นว่าลองยกตัวอย่างของคุณไปอีกขั้นหนึ่ง ถ้าคุณต้องเรียกใช้แบบสอบถาม 2 รายการแทนที่จะเป็น 1 แล้วดำเนินการคำสั่งตามนั้น ดังนั้นโค้ด 2 บรรทัดของคุณจะเป็น 6 หรือ 8 จะเกิดอะไรขึ้นถ้ามีการตรวจสอบ / ตรวจสอบข้อมูลระหว่างหนึ่งกับอีกอันดังนั้นตอนนี้คุณมีรหัส 15 บรรทัด คุณจะคิดสองครั้งเกี่ยวกับการสร้าง wrapper ที่ทำทุกอย่างแทนที่จะโรย 15 บรรทัดในหลายไฟล์หรือไม่?