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