हाल ही में एक कोड समीक्षा के दौरान मुझे एक नए सहयोगी द्वारा लिखित कोड आया, जिसमें एक गंध के साथ एक पैटर्न है। मुझे संदेह है कि मेरे सहकर्मी के फैसले प्रसिद्ध क्लीन कोड बुक द्वारा प्रस्तावित नियमों पर आधारित हैं (और शायद इसी तरह की अन्य पुस्तकों द्वारा भी)।
यह मेरी समझ है कि वर्ग निर्माता पूरी तरह से एक वैध वस्तु के निर्माण के लिए जिम्मेदार है और इसका मुख्य कार्य किसी वस्तु (निजी) गुणों का असाइनमेंट है। यह निश्चित रूप से हो सकता है कि वैकल्पिक संपत्ति मूल्यों को क्लास कंस्ट्रक्टर के अलावा अन्य तरीकों से निर्धारित किया जा सकता है, लेकिन ऐसी स्थितियां दुर्लभ हैं (हालांकि जरूरी नहीं कि गलत हो, बशर्ते कि बाकी वर्ग ऐसी संपत्ति की वैकल्पिकता को ध्यान में रखे)। यह महत्वपूर्ण है, क्योंकि यह सुनिश्चित करने की अनुमति देता है कि वस्तु हमेशा एक वैध स्थिति में है।
हालाँकि, मेरे द्वारा कोड किए गए कोड में, अधिकांश संपत्ति मूल्य वास्तव में निर्माणकर्ता की तुलना में अन्य तरीकों से निर्धारित होते हैं। मान जो गणना से उत्पन्न होते हैं, उन्हें संपूर्ण कक्षा में कई निजी तरीकों के अंदर उपयोग किए जाने वाले गुणों को सौंपा जाता है। लेखक प्रतीत होता है कि वे वर्ग गुणों का उपयोग करते हैं जैसे कि वे वैश्विक चर थे जो इन मूल्यों को उन कार्यों के मापदंडों के बजाय पूरे वर्ग में सुलभ होना चाहिए, जिनकी उन्हें आवश्यकता है। इसके अतिरिक्त, वर्ग के तरीकों को एक विशिष्ट क्रम में बुलाया जाना चाहिए, क्योंकि कक्षा बहुत अन्यथा नहीं करेगी।
मुझे संदेह है कि यह कोड बड़े पैरामीटर सूचियों (<3 पैरामीटर) से बचने के लिए तरीकों को छोटा (<= 5 लाइनों का कोड) रखने की सलाह से प्रेरित है और निर्माणकर्ताओं को काम नहीं करना चाहिए (जैसे किसी प्रकार की गणना करना) वह वस्तु की वैधता के लिए आवश्यक है)।
अब निश्चित रूप से मैं इस पैटर्न के खिलाफ एक मामला बना सकता हूं अगर मैं यह साबित कर सकता हूं कि सभी प्रकार की अपरिभाषित त्रुटियां संभावित रूप से उत्पन्न होती हैं, जब विधियों को एक विशिष्ट क्रम में नहीं बुलाया जाता है। हालाँकि, मैं यह अनुमान लगाता हूं कि यह प्रतिक्रिया उन मान्यताओं को जोड़ने वाली है जो यह सत्यापित करती हैं कि गुणों को सेट करने के बाद एक बार विधियों को सेट किया जाना चाहिए, जिन्हें उन गुणों को सेट करने की आवश्यकता है।
मैं हालांकि कोड को पूरी तरह से बदलने का प्रस्ताव रखूंगा, ताकि कक्षा एक वास्तविक वस्तु के लिए एक ब्लू प्रिंट बन जाए, न कि विधियों की एक श्रृंखला के बजाय जिसे एक विशिष्ट क्रम में (प्रक्रियात्मक रूप से) कहा जाना चाहिए।
मुझे लगता है कि जिस कोड का मुझे सामना करना पड़ा था उसमें बदबू आ रही थी। वास्तव में, मेरा मानना है कि एक वर्गीय संपत्ति में एक मूल्य को बचाने के लिए एक स्पष्ट अंतर मौजूद है, और जब इसे उपयोग करने के लिए एक अलग विधि के लिए एक पैरामीटर में रखा जाए - मैं वास्तव में विश्वास नहीं करता कि वे एक दूसरे के लिए विकल्प हो सकते हैं । मैं इस भेद के लिए शब्द खोज रहा हूं।