किसी भी नियम के रूप में, मुझे लगता है कि यहां महत्वपूर्ण बात यह है कि नियम का उद्देश्य, आत्मा पर विचार करना है, और यह विश्लेषण करने में निहित नहीं है कि नियम को किसी पाठ्यपुस्तक में कैसे और इस मामले में कैसे लागू किया जाए। हमें वकीलों की तरह इसे अपनाने की जरूरत नहीं है। नियमों का उद्देश्य बेहतर कार्यक्रम लिखने में हमारी मदद करना है। यह ऐसा नहीं है कि कार्यक्रम लिखने का उद्देश्य नियमों को बनाए रखना है।
एकल-जिम्मेदारी नियम का उद्देश्य प्रत्येक कार्य को एक आत्म निहित, सुसंगत चीज बनाकर समझने और बनाए रखने के लिए कार्यक्रमों को आसान बनाना है।
उदाहरण के लिए, मैंने एक बार एक फ़ंक्शन लिखा था, जिसे मैंने "checkOrderStatus" की तरह कुछ कहा था, जो निर्धारित करता था कि यदि कोई ऑर्डर लंबित, भेज दिया गया, वापस-आदेश दिया गया, जो भी हो, और एक कोड का संकेत देता है। फिर एक और प्रोग्रामर साथ आया और इस फ़ंक्शन को संशोधित किया गया ताकि ऑर्डर भेजने पर हाथ पर मात्रा भी अपडेट हो सके। इसने एकल जिम्मेदारी सिद्धांत का गंभीर उल्लंघन किया। उस कोड को पढ़ने वाला एक अन्य प्रोग्रामर बाद में फ़ंक्शन का नाम देखेगा, यह देखेगा कि रिटर्न वैल्यू का उपयोग कैसे किया गया था, और अच्छी तरह से कभी संदेह नहीं कर सकता है कि उसने डेटाबेस अपडेट किया था। किसी को जो हाथ पर मात्रा को अपडेट किए बिना आदेश की स्थिति प्राप्त करने की आवश्यकता है, वह एक अजीब स्थिति में होगा: क्या उसे एक नया फ़ंक्शन लिखना चाहिए जो आदेश स्थिति भाग को डुप्लिकेट करता है? एक ध्वज जोड़ें यह बताने के लिए कि क्या db अपडेट करना है? आदि।
दूसरी ओर, मैं "दो चीजों" का गठन नहीं करता हूं। मैंने अभी हाल ही में एक फ़ंक्शन लिखा है जो हमारे सिस्टम से ग्राहक की जानकारी हमारे क्लाइंट के सिस्टम को भेजता है। यह फ़ंक्शन उनकी आवश्यकताओं को पूरा करने के लिए डेटा के कुछ पुन: स्वरूपण करता है। उदाहरण के लिए, हमारे पास कुछ ऐसे क्षेत्र हैं जो हमारे डेटाबेस पर शून्य हो सकते हैं, लेकिन वे नल की अनुमति नहीं देते हैं इसलिए हमें कुछ डमी टेक्स्ट भरना होगा, "निर्दिष्ट नहीं" या मैं सटीक शब्दों को भूल जाता हूं। संभवतः यह फ़ंक्शन दो चीजें कर रहा है: डेटा को पुन: स्वरूपित करें और इसे भेजें। लेकिन मैंने बहुत जानबूझकर इसे "सुधारक" और "भेजने" के बजाय एक ही फ़ंक्शन में रखा क्योंकि मैं कभी नहीं चाहता, कभी भी बिना सुधार किए भेजें। मैं नहीं चाहता कि कोई व्यक्ति नई कॉल लिखे और यह महसूस न करे कि उसे रिफॉर्मैट को कॉल करना है और फिर भेजना है।
आपके मामले में, डेटाबेस को अपडेट करें और लिखे गए रिकॉर्ड की एक छवि लौटाएं, ऐसा लगता है कि दो चीजें अच्छी तरह से तार्किक और अनिवार्य रूप से एक साथ चल सकती हैं। मुझे आपके आवेदन का विवरण नहीं पता है इसलिए मैं निश्चित रूप से नहीं कह सकता कि यह एक अच्छा विचार है या नहीं, लेकिन यह प्रशंसनीय लगता है।
यदि आप स्मृति में एक ऑब्जेक्ट बना रहे हैं जो रिकॉर्ड के लिए सभी डेटा रखता है, तो डेटाबेस यह लिखने के लिए कॉल करता है, और फिर ऑब्जेक्ट को वापस करता है, इससे बहुत कुछ समझ में आता है। आपके हाथों में वस्तु है। सिर्फ इसे वापस क्यों नहीं? यदि आप ऑब्जेक्ट वापस नहीं करते हैं, तो कॉलर इसे कैसे प्राप्त करेगा? क्या उसने आपके द्वारा लिखी गई वस्तु को प्राप्त करने के लिए डेटाबेस को पढ़ना होगा? बल्कि अक्षम लगता है। वह रिकॉर्ड कैसे पाएगा? क्या आप प्राथमिक कुंजी जानते हैं? यदि कोई व्यक्ति यह घोषणा करता है कि प्राथमिक फ़ंक्शन को वापस करने के लिए लेखन फ़ंक्शन के लिए यह "कानूनी" है ताकि आप रिकॉर्ड को फिर से पढ़ सकें, तो पूरे रिकॉर्ड को वापस क्यों न करें, ताकि आपके पास न हो? क्या फर्क पड़ता है?
दूसरी ओर, यदि ऑब्जेक्ट का निर्माण डेटाबेस रिकॉर्ड को लिखने से काफी अलग है, और एक कॉलर अच्छी तरह से लिखना चाहेगा, लेकिन ऑब्जेक्ट नहीं बना सकता है, तो यह बेकार हो सकता है। यदि कोई कॉलर ऑब्जेक्ट चाहता है, लेकिन राइट नहीं करता है, तो आपको ऑब्जेक्ट प्राप्त करने के लिए एक और तरीका प्रदान करना होगा, जिसका अर्थ अनावश्यक कोड लिखना हो सकता है।
लेकिन मुझे लगता है कि परिदृश्य 1 अधिक संभावना है, इसलिए मैं कहूंगा, शायद कोई समस्या नहीं है।