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