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