एक साइड नोट के रूप में: एक नई नौकरी की तलाश करें। यह कोई भी बेहतर नहीं मिलेगा।
आपके द्वारा समीक्षा किए जा रहे कोड के लक्ष्य हैं:
एक सुविधा को जहाज करने के लिए, जिसे आवश्यकताओं के अनुसार काम करना चाहिए।
तकनीकी ऋण की वृद्धि को कम करने के लिए।
पहले लक्ष्य की समीक्षा की जाती है कि यूनिट, एकीकरण, प्रणाली और कार्यात्मक परीक्षण यहां हैं, कि वे प्रासंगिक हैं, और वे उन सभी स्थितियों को कवर करते हैं, जिनका परीक्षण किया जाना है। आपको उन मान्यताओं की भी जांच करनी होगी जो मूल लेखक के पास प्रोग्रामिंग भाषा के बारे में हो सकती हैं, जो सूक्ष्म कीड़े या कोड के लिए नेतृत्व कर सकती है जो वास्तव में यह करता है उससे कुछ अलग करने का नाटक करता है।
दूसरा लक्ष्य वह है जिस पर आपका प्रश्न केंद्रित है। एक तरफ, नए कोड से तकनीकी ऋण में वृद्धि की उम्मीद नहीं है। दूसरी ओर, समीक्षा का दायरा स्वयं कोड है, लेकिन पूरे कोडबेस के संदर्भ में। वहाँ से, आप, एक समीक्षक के रूप में, मूल लेखक से दो दृष्टिकोणों की अपेक्षा कर सकते हैं:
बाहर का कोड मेरी गलती नहीं है। मैं सिर्फ फीचर लागू करता हूं और पूरे कोडबेस की परवाह नहीं करता।
इस परिप्रेक्ष्य में, कोड कोडबेस के दोषों की नकल करेगा, और इसलिए अनिवार्य रूप से तकनीकी ऋण में वृद्धि होगी : अधिक बुरा कोड हमेशा बदतर होता है।
हालांकि यह दीर्घकालिक रूप से एक मान्य अल्पकालिक दृष्टिकोण है, इसके परिणामस्वरूप देरी और कम उत्पादकता बढ़ जाती है, और अंततः विकास प्रक्रिया इतनी महंगी और जोखिम भरी हो जाती है कि उत्पाद विकसित होना बंद हो जाएगा।
नया कोड लिखना एक विरासत को फिर से दर्शाने का एक अवसर है।
इस परिप्रेक्ष्य में, नए पर विरासत कोड के दोषों का प्रभाव सीमित हो सकता है। इसके अलावा, तकनीकी ऋण को कम किया जा सकता है, या कम से कम कोड वृद्धि के अनुपात में नहीं बढ़ाया जा सकता है।
हालांकि यह एक दीर्घकालिक दीर्घकालिक दृष्टिकोण है, इसके अल्पकालिक जोखिम हैं। प्रमुख यह है कि, अल्पकालिक, विशिष्ट विशेषता को जहाज करने में कभी-कभी अधिक समय लगेगा। एक और महत्वपूर्ण पहलू यह है कि यदि विरासत कोड अप्रयुक्त है, तो इसे फिर से शुरू करने से प्रतिगमन शुरू करने का एक बड़ा जोखिम प्रस्तुत होता है।
जिस परिप्रेक्ष्य को आप प्रोत्साहित करना चाहते हैं, उसके आधार पर, आप समीक्षकों को अधिक से अधिक रिफलेक्टर की सलाह देने के लिए इच्छुक हो सकते हैं। सभी मामलों में, एक भद्दा कोडबेस के अंदर अच्छे आर्किटेक्चर और डिज़ाइन के साथ निर्दोष, साफ-सुथरे कोड की अपेक्षा न करें। आपको जो प्रोत्साहित नहीं करना चाहिए वह वह व्यवहार है जहां एक जानकार डेवलपर जिसे एक भद्दा कोडबेस पर काम करना है, वह अपने हिस्से को अच्छी तरह से करने की कोशिश करता है । चीजों को सरल बनाने के बजाय, यह केवल उन्हें पहले और अधिक जटिल बनाता है। अब, समान बुरे कोड के बजाय, आपके पास डिज़ाइन पैटर्न के साथ एक भाग है, साफ, स्पष्ट कोड के साथ एक और हिस्सा, एक और हिस्सा जो समय के साथ बड़े पैमाने पर रिफलेक्ट किया गया था, और कोई एकता नहीं है।
उदाहरण के लिए, कल्पना कीजिए कि आप एक मध्यम आकार की वेबसाइट की विरासत कोडबेस की खोज कर रहे हैं। आप किसी भी सामान्य संरचना की कमी और इस तथ्य से आश्चर्यचकित हैं कि लॉगिंग, जब यह किया जाता है, तो लॉगिंग फ्रेमवर्क का उपयोग करने के बजाय सामान को हाथ से पाठ फ़ाइल में जोड़कर किया जाता है। आप MVC और लॉगिंग फ़्रेमवर्क का उपयोग करने के लिए नई सुविधा के लिए निर्णय लेते हैं।
आपका सहकर्मी एक और सुविधा लागू कर रहा है और एक ORM की कमी से बहुत आश्चर्यचकित है जहां कोई सही आकार बनाएगा। इसलिए वह ORM का उपयोग करना शुरू कर देता है।
एमवीसी, या लॉगिंग फ्रेमवर्क, या हर जगह एक ओआरएम का उपयोग करने के लिए न तो आप और न ही आपके सहयोगी कोड की हजारों-हजारों लाइनों से गुजरने में सक्षम हैं। वास्तव में, इसके लिए कई महीनों की आवश्यकता होगी: एमवीसी को शुरू करने की कल्पना करना; इसमें कितना समय लगेगा? या उन स्थितियों में ORM के बारे में क्या है जहाँ SQL क्वेरीज़ को कोड के अंदर समवर्ती (SQL इंजेक्शन के लिए सामयिक स्थानों के साथ) उत्पन्न किया गया था, कोई भी समझ नहीं सका?
आपको लगता है कि आपने बहुत अच्छा काम किया है, लेकिन अब, एक नए डेवलपर जो परियोजना में शामिल होता है, को पहले की तुलना में बहुत अधिक जटिलता का सामना करना पड़ता है:
अनुरोधों के उपचार का पुराना तरीका,
MVC रास्ता,
पुराने लॉगिंग तंत्र,
लॉगिंग फ्रेमवर्क,
मक्खी पर निर्मित SQL प्रश्नों के साथ डेटाबेस तक सीधी पहुंच,
ORM।
एक परियोजना पर मैं काम कर रहा था, वहाँ चार (!) लॉगिंग चौखटे के साथ-साथ उपयोग किए गए थे (प्लस मैनुअल लॉगिंग)। इसका कारण यह है कि हर बार जब कोई सामान को लॉग इन करना चाहता था, तो ऐसा करने के लिए कोई सामान्य दृष्टिकोण नहीं था, इसलिए एक नया ढांचा सीखने के बजाय (जो सभी मामलों में केवल 5% कोडबेस में उपयोग किया गया था), एक बस एक और एक जोड़ देगा पहले से जानते हैं। गंदगी की कल्पना करो।
एक बेहतर तरीका यह होगा कि एक बार में एक चरण में कोडबेस को रिफलेक्टर किया जाए। एक बार फिर लॉगिंग का उदाहरण लेते हुए, रीफैक्टरिंग में निम्नलिखित छोटे चरण शामिल होंगे:
उन सभी स्थानों का पता लगाएं जहां विरासत लॉगिंग की जाती है (यानी जब लॉग फ़ाइल सीधे एक्सेस की जाती है) और सुनिश्चित करें कि वे सभी समान विधियों को कहते हैं।
इस कोड को एक समर्पित लाइब्रेरी में ले जाएं, यदि लागू हो। मैं अपनी खरीदारी कार्ट क्लास में स्टोरेज लॉजिक को लॉग इन नहीं करना चाहता।
संशोधित करें, यदि आवश्यक हो, तो लॉगिंग विधियों का इंटरफ़ेस। उदाहरण के लिए, हम यह सूचित करते हुए एक स्तर जोड़ सकते हैं कि क्या संदेश अनौपचारिक है, या चेतावनी है या कोई त्रुटि है।
नई सुविधा में नए रिफैक्ट किए गए तरीकों का उपयोग करें।
लॉगिंग फ्रेमवर्क में माइग्रेट करें: केवल प्रभावित कोड समर्पित लाइब्रेरी के भीतर का कोड है।