TOP
रिफैक्टरिंग क्या है?
विवरण
पुनर्रचना (Refactoring) - बाहरी व्यवहार को बदले बिना समझने में आसान और तेजी से संशोधित करने के लिए सॉफ़्टवेयर (सॉफ़्टवेयर) की आंतरिक संरचना में किए गए परिवर्तन। साथ ही, यह सॉफ़्टवेयर के बाहरी व्यवहार को बदले बिना रीफैक्टरिंग के अनुक्रम के अनुप्रयोग के माध्यम से सॉफ़्टवेयर का पुनर्गठन है।
रीफैक्टरिंग के लाभ:
- रिफैक्टरिंग से सॉफ्टवेयर डिजाइन में सुधार होता है। समय के साथ, कोड में कई अतिरिक्त परिवर्तन किए जाते हैं और सॉफ़्टवेयर समय के साथ अपनी संरचना खो देता है। संरचना के नुकसान का संचयी प्रभाव पड़ता है। कोड में डिज़ाइन को देखना जितना कठिन है, उसे बनाए रखना उतना ही कठिन है और वह उतनी ही तेज़ी से अलग हो जाता है। साथ ही, ऐसे परिवर्तन कोड के अतिरेक और दोहराव का कारण बनते हैं, जिससे सिस्टम को समझना और संशोधित करना अधिक कठिन हो जाता है।
- रिफैक्टरिंग सॉफ्टवेयर कोड को अधिक समझने योग्य बनाती है।
जब आपको रीफैक्टरिंग करने की आवश्यकता हो:
- जब कोई नई सुविधा जोड़ी जाती है;
- जब किसी त्रुटि को सुधारा (निश्चित) किया जाता है;
- कोड समीक्षा के दौरान.
कोड में दुर्गंध आ रही है (Smells Catalog) :
- कोड दोहराव
- लम्बी विधि
- बड़ी क्लास
- मापदंडों की एक लंबी सूची
- भिन्न संशोधन
- शॉट शूटिंग
- ईर्ष्यालु विशेषताएं
- डेटा के ब्लॉक
- मौलिक प्रकारों के प्रति जुनून
- Switch ऑपरेटरों
- नकल के समानांतर पदानुक्रम
- आलसी वर्ग
- सट्टा (सैद्धांतिक) समुदाय
- अस्थायी क्षेत्र
- संदेश सूत्र
- प्रतिनिधि
- अनुचित निकटता
- विभिन्न इंटरफेस के साथ वैकल्पिक कक्षाएं
- अपूर्ण पुस्तकालय कक्षा
- डेटा वर्ग
- टिप्पणियाँ
संभावित रिफैक्टरिंग विकल्प
-
Moving Features Between Objects (वस्तुओं के बीच पूर्ण कोड स्थानांतरण):
- Move Method (हाइलाइट करने की विधि) - यदि विधि बहुत लंबी है या उसमें कोई कोड है जिस पर टिप्पणी की आवश्यकता है तो विधि को अलग कर दें।
- Move Field (गन्तव्य क्षेत्र) - तब निष्पादित किया जाता है जब फ़ील्ड का उपयोग किसी अन्य वर्ग द्वारा उसके निर्धारित स्थान से अधिक बार किया जाता है।
-
Organizing Data (डेटा व्यवस्था):
- Encapsulate Field (फ़ील्ड इनकैप्सुलेशन) - OOP के मुख्य सिद्धांतों में से एक एनकैप्सुलेशन, या डेटा छिपाना है। डेटा को सार्वजनिक करके, ऑब्जेक्ट डेटा स्वामी की जानकारी के बिना उसके मूल्यों को पढ़ और बदल सकता है। खैर, हम ऐसी फैडेल को बंद कर देते हैं, निर्देशक अध्याय में प्रस्तुतिकरण करते हैं।
- Encapsulate Collection (संग्रह एनकैप्सुलेशन) - अक्सर नमूने कक्षा में एकत्र किए जाते हैं। यह संग्रह एक सरणी, सूची, सेट या वेक्टर हो सकता है। गेटर विधि को संग्रह ऑब्जेक्ट को स्वयं वापस नहीं करना चाहिए, क्योंकि इससे ग्राहकों को उस वर्ग के ज्ञान के बिना संग्रह की सामग्री को संशोधित करने की अनुमति मिल जाएगी जो इसके मालिक हैं। इसलिए, आपको विधि द्वारा लौटाए गए मान को केवल-पढ़ने के लिए बनाने और तत्वों को जोड़ने/हटाने के लिए तरीके बनाने की आवश्यकता है।
-
Composing Methods (कोड никална аур санёзојит карна):
- Extract Method (हाइलाइट करने की विधि) - यदि कोई कोड का टुकड़ा है जिसे समूहीकृत किया जा सकता है, तो उस टुकड़े को एक अलग विधि में एक ऐसे नाम के साथ रखें जो उसके उद्देश्य का वर्णन करता हो। इस प्रकार, विधि का नाम टिप्पणियों का स्थान होगा।
- Inline Method (एम्बेडिंग विधि) - कभी-कभी विधि के मुख्य भाग को उस कोड में लेना उपयोगी होता है जो इसे कॉल करता है। कबही-कबही विधि असंगठित ही आत्मा व्याख्या होती है, जिसका नाम है। यह स्थिति तब भी हो सकती है जब कई अलग-अलग विधियाँ हों जिनकी संरचना असफल हो, और इसलिए बेहतर है कि उन सभी को एक ही सामान्य विधि में छोड़ दिया जाए और फिर अन्य तरीकों से विधियों को अलग कर दिया जाए।
- Inline Temp (अस्थायी चर का सम्मिलन) - एक वर्ष का सबसे अच्छा दोस्त एक बार में एक शब्द का वर्णन करता है। कबही-कबही ऐसे चार अन्य रिफैक्टरिंग में में में में में में से 14 मिनट में 4 अन्य रेफैक्टरिंग फैक्टर गार है।
- Replace Temp with Query (एक विधि कॉल के साथ एक अस्थायी फ़ील्ड बदलना) - इसका उपयोग तब किया जाता है जब किसी अभिव्यक्ति के मूल्य को संग्रहीत करने के लिए अस्थायी चर का उपयोग किया जाता है। इस मामले में, हम अभिव्यक्ति को एक नई विधि से प्रतिस्थापित करते हैं और इस वर्ण के कोड में सभी संदर्भों को एक नई विधि से प्रतिस्थापित करते हैं।
- Split Temporary Variable (अस्थायी चरागाह को विभाजित करें) - लागू होता है यदि एक एकल अस्थायी चर का उपयोग विभिन्न परिणामों के लिए एकाधिक परिणाम निर्दिष्ट करने के लिए किया जाता है (जब तक कि यह एक लूप के भीतर लूप में उपयोग किया जाने वाला चर न हो और परिणाम को स्टोर करने के लिए चार नहीं है)। इस मामले में, हम प्रत्येक असाइनमेंट के लिए एक अलग वेरिएबल बनाते हैं।
-
Simplifying Conditional Expressions (शर्तों के साथ अभिव्यक्ति को सरल बनाने के लिए):
- Decompose Conditional (सूरत संचालक का आवेदन) - टैब अवास्तविक है जब हरे पास चेक की एक सच्चरित्र सेचित्र है (इडी-तब-अन्यथा)। यदि आप (यदि), तो आप इसे प्राप्त कर सकते हैं और इसे प्राप्त कर सकते हैं यह ब्रांचिंग के कारण की बेहतर समझ में योगदान देता है, और विधि का नाम कोड के संबंधित टुकड़े के उद्देश्य को स्पष्ट करता है।
- Consolidate Conditional Expression (सशर्त अभिव्यक्ति का समेकन) - ऐसा तब किया जाता है जब कई स्थितियों की जाँच की जाती है जो समान परिणाम देती हैं। आपको सभी जांचों को एक सशर्त अभिव्यक्ति या विधि में संयोजित करने की आवश्यकता है।
- Consolidate Duplicate Conditional Fragments (दोहराया गया) - सशर्त अभिव्यक्ति की साथ-साथ शाश्तों में एक ही प्रयोजन है आपको इस अभिव्यक्ति से कोड का यह टुकड़ा निकालना होगा।
- Remove Control Flag (நிய்ட்டை வாயு தாட்டான்) - एक वेरिएबल है जो तार्किक अभिव्यक्तियों की श्रृंखला के लिए नियंत्रण ध्वज के रूप में कार्य करता है। हम अब यूटर्न का ब्रेक ले चुके हैं।
- Replace Conditional with Polymorphism (ऑपरेटर को मल्टी-फ़ंक्शन के साथ बदलने की आवश्यकता है) - टैब में जाब को कार्ट उपर्ट होता है जिसका व्यवहार ऑब्जेक्ट प्रकार पर निर्भर करता है यदि ऑपरेटर सशर्त है तो उपवर्ग की प्रत्येक शाखा को अतिभारित विधि में स्थानांतरित करना आवश्यक है। स्रोत कोड को संक्षेप में प्रस्तुत करें।