Java पर लीगेसी कोड का रीफैक्टरिंग: A से Z तक चरण-दर-चरण मार्गदर्शिका

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java पर लीगेसी कोड का रीफैक्टरिंग: A से Z तक



Java पर विरासत (legacy) कोड के साथ काम करना एक चुनौती है, जिसका सामना हर डेवलपर करता है। पुराने कोड में अक्सर टेस्ट नहीं होते, इसमें पुराने पैटर्न होते हैं और इसे बदलना मुश्किल होता है। हालांकि, प्रोजेक्ट को पूरी तरह से दोबारा लिखना हमेशा सबसे अच्छा समाधान नहीं होता। इस लेख में, हम लीगेसी कोड के रीफैक्टरिंग के लिए एक सिद्ध दृष्टिकोण पर चर्चा करेंगे: विश्लेषण से लेकर बदलावों को लागू करने तक, Java पर विशिष्ट उदाहरणों के साथ।



1. निदान और तैयारी: कोड को छूने से पहले



पहला और सबसे महत्वपूर्ण कदम यह समझना है कि आप किसके साथ काम कर रहे हैं। अव्यवस्थित रूप से लाइनों को संपादित करके रीफैक्टरिंग शुरू न करें। इसके बजाय:



  • निर्भरता मानचित्र: विज़ुअलाइज़ करें कि कौन सी कक्षाएं किस पर निर्भर हैं। IntelliJ IDEA Dependency Viewer या JDepend जैसे टूल का उपयोग करें।
  • टेस्ट रैपर (Characterization Tests): ऐसे टेस्ट लिखें जो कोड के वर्तमान व्यवहार को रिकॉर्ड करें। यह आपका सुरक्षा जाल है।
  • प्रवेश बिंदुओं को चिह्नित करें: निर्धारित करें कि कौन से तरीके सबसे अधिक बार कॉल किए जाते हैं और मुख्य बदलाव कहाँ होते हैं।


एक सरल characterization टेस्ट का उदाहरण जिसे रीफैक्टर करने की आवश्यकता है:



import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.assertEquals;

public class LegacyCalculatorTest {

@Test public void testLegacyCalculate() { LegacyCalculator calc = new LegacyCalculator(); // वर्तमान व्यवहार रिकॉर्ड करें int result = calc.calculate(10, 5, "add"); assertEquals(15, result, "वर्तमान व्यवहार: जोड़"); result = calc.calculate(10, 5, "sub"); assertEquals(5, result, "वर्तमान व्यवहार: घटाव"); }}


ऐसा टेस्ट पूर्ण अर्थों में तर्क की शुद्धता की जाँच नहीं करता - यह केवल रिकॉर्ड करता है कि कोड अभी क्या करता है। रीफैक्टरिंग के बाद, टेस्ट पास होना चाहिए, अन्यथा आपने व्यवहार बदल दिया है।



2. "सर्जिकल" रीफैक्टरिंग रणनीति: एक-एक करके विधि



पूरी क्लास को एक साथ रीफैक्टर करने का प्रयास बग पैदा करने का एक निश्चित तरीका है। "कॉम्बैट आर्कियोलॉजी" (Combat Archaeology) दृष्टिकोण का उपयोग करें:



  • एक विधि या संबंधित विधियों का एक छोटा समूह चुनें।
  • उनके लिए characterization टेस्ट लिखें (यदि नहीं हैं)।
  • एक रीफैक्टरिंग तकनीक लागू करें (जैसे, Extract Method या Rename Variable)।
  • टेस्ट चलाएँ। उन्हें पास होना चाहिए।
  • स्पष्ट विवरण के साथ बदलावों को कमिट करें।


उदाहरण: "मैजिक नंबर" और पैरामीटर की लंबी सूची वाली विधि का रीफैक्टरिंग।



मूल कोड (खराब):



public class OrderProcessor {    public double process(double amount, int type, double discount) {        double result;        if (type == 1) {            result = amount * 1.2; // 20% मार्कअप            if (discount > 0.1) {                result = result - result * 0.05; // 5% छूट            }        } else if (type == 2) {            result = amount * 1.5; // 50% मार्कअप        } else {            result = amount;        }        return result;    }}


रीफैक्टरिंग के बाद (बेहतर):



public class OrderProcessor {    private static final double PREMIUM_MARKUP = 1.2;    private static final double STANDARD_MARKUP = 1.5;    private static final double LOYALTY_DISCOUNT = 0.05;    private static final double DISCOUNT_THRESHOLD = 0.1;

public double process(OrderType type, double amount, double discount) { double basePrice = applyMarkup(amount, type); return applyLoyaltyDiscount(basePrice, discount); }

private double applyMarkup(double amount, OrderType type) { return switch (type) { case PREMIUM -> amount * PREMIUM_MARKUP; case STANDARD -> amount * STANDARD_MARKUP; case BASIC

ब्लॉग

पुस्तक अनुशंसाएँ