मैंने पहले कमांड-क्वेरी-सेपरेशन (CQS) के बारे में नहीं सुना है, लेकिन ऐसा लगता है कि यह सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल (SRP) से संबंधित होगा, जिसमें कहा गया है कि एक फ़ंक्शन / क्लास आदर्श रूप से केवल एक काम और एक चीज़ करने के लिए ज़िम्मेदार होना चाहिए ।
यदि आपका कमांड कोड 20 लाइनों का कोड है और क्वेरी कोड एक और 30 लाइनें हैं और वे सभी एक फ़ंक्शन बॉडी में हैं, स्पष्ट रूप से आप SRP का उल्लंघन कर रहे हैं और मैं CQS को भी मान लूंगा और तर्क के उन दो टुकड़ों को एक दूसरे से अलग कर दिया जाना चाहिए ।
हालांकि, आपके काल्पनिक उदाहरण के साथ, मैं सबसे अधिक संभावना एक आवरण विधि बनाऊंगा जो आपके आदेश और क्वेरी को संयोजित करेगा ताकि DRY कोड में कई स्थानों पर उल्लंघन न हो। मैं इसे SRP (और शायद CQS) उल्लंघन भी नहीं मानूंगा, क्योंकि आवरण में अभी भी केवल एक ही जिम्मेदारी है: एक क्वेरी के साथ कमांड को संयोजित करना और एक उच्च स्तर का अमूर्त बनाना जो उपभोग करने में आसान है।
मुझे लगता है कि आवरण विधि पूरी तरह से स्वीकार्य समाधान है और यह स्पष्ट करने के लिए कि चलो अपने उदाहरण को एक कदम आगे ले जाएं। क्या होगा अगर आपको 1 के बजाय 2 क्वेरी को चलाना था और फिर उसके आधार पर कमांड एक्शन करना होगा। तो आपके कोड की 2 पंक्तियाँ 6 या 8 होंगी। क्या होगा यदि एक और के बीच कुछ डेटा सत्यापन / जाँच हो रही है, तो अब आपके पास कोड की 15 लाइनें हैं। क्या आप एक रैपर बनाने के बारे में दो बार सोचेंगे जो उन सभी 15 पंक्तियों को कई फाइलों में छिड़कने के बजाय करता है?