लीगेसी जावा कोड का रिफैक्टरिंग: चरण-दर-चरण मार्गदर्शिका

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

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

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

जावा में लीगेसी कोड का रिफैक्टरिंग: कहां से शुरू करें और प्रोजेक्ट को कैसे न तोड़ें



प्रत्येक जावा डेवलपर को देर-सबेर लीगेसी कोड का सामना करना पड़ता है। यह दस साल पहले लिखा गया एक मोनोलिथिक एप्लिकेशन हो सकता है, या पुराने पैटर्न, परीक्षणों की कमी और "मैजिक नंबर्स" वाला प्रोजेक्ट हो सकता है। ऐसे कोड का रिफैक्टरिंग आसान काम नहीं है, लेकिन सिस्टम की व्यवहार्यता बनाए रखने के लिए यह बिल्कुल आवश्यक है।



इस लेख में, हम जावा में लीगेसी कोड के रिफैक्टरिंग की मुख्य रणनीतियों पर चर्चा करेंगे, विशिष्ट उदाहरण दिखाएंगे और व्यावहारिक सुझाव देंगे जो प्रोडक्शन को तोड़ने के जोखिम के बिना कोड को बेहतर बनाने में आपकी मदद करेंगे।



लीगेसी कोड को रिफैक्टरिंग की आवश्यकता क्यों है?



लीगेसी कोड सिर्फ "पुराना कोड" नहीं है। यह वह कोड है जो:



  • बनाए रखना और विस्तारित करना कठिन है
  • परीक्षणों द्वारा पर्याप्त कवरेज नहीं है
  • दोहराव और "कोड स्मेल्स" शामिल हैं
  • पुरानी लाइब्रेरी और दृष्टिकोण का उपयोग करता है


रिफैक्टरिंग कोड की पठनीयता, प्रदर्शन और परीक्षण क्षमता में सुधार करने की अनुमति देता है। हालांकि, मुख्य नियम है — सिस्टम के बाहरी व्यवहार को न बदलें। प्रत्येक परिवर्तन सुरक्षित और नियंत्रित होना चाहिए।



जावा में लीगेसी कोड के रिफैक्टरिंग की रणनीतियाँ



1. परीक्षणों से एक सुरक्षात्मक जाल बनाना



कोड को छूने से पहले, परीक्षण लिखें। यदि कोड का परीक्षण करना कठिन है तो यह मुश्किल हो सकता है। Characterization Tests (वर्तमान व्यवहार पर आधारित परीक्षण) दृष्टिकोण का उपयोग करें।



उदाहरण: आपके पास एक विधि है जो ऑर्डर प्रोसेस करती है:



public class OrderProcessor {    public double calculateTotal(Order order) {        double total = 0;        for (Item item : order.getItems()) {            if (item.getPrice() > 100) {                total += item.getPrice() * 0.9; // 10% छूट            } else {                total += item.getPrice();            }        }        if (order.isPremium()) {            total *= 0.95; // अतिरिक्त 5% छूट        }        return total;    }}


हम एक परीक्षण लिखते हैं जो वर्तमान व्यवहार को रिकॉर्ड करता है:



@Testpublic void testCalculateTotal_WithPremiumAndExpensiveItems() {    Order order = new Order();    order.addItem(new Item("Laptop", 1000));    order.addItem(new Item("Mouse", 50));    order.setPremium(true);        double expected = (1000 * 0.9 + 50) * 0.95; // 902.5    assertEquals(expected, new OrderProcessor().calculateTotal(order), 0.001);}


अब आपके पास एक "सुरक्षात्मक जाल" है। आप तर्क बदलने के डर के बिना रिफैक्टर कर सकते हैं।



2. बड़ी विधियों को विभाजित करना (Extract Method)



लीगेसी कोड की सबसे आम समस्याओं में से एक सैकड़ों पंक्तियों लंबी "राक्षस" विधियाँ हैं। उन्हें छोटी, अच्छी तरह से नामित विधियों में विभाजित करें।



रिफैक्टरिंग से पहले:



public void processInvoice(Invoice invoice) {    // 50 पंक्तियाँ सत्यापन    if (invoice.getCustomer() == null) throw new IllegalArgumentException();    if (invoice.getItems().isEmpty()) throw new IllegalStateException();    // ... और 20 पंक्तियाँ सत्यापन        // 100 पंक्तियाँ छूट और कर गणना        // 80 पंक्तियाँ ईमेल भेजना और डेटाबेस में सहेजना}


रिफैक्टरिंग के बाद:



public void processInvoice(Invoice invoice) {    validateInvoice(invoice);    double total = calculateTotal(invoice);    saveInvoice(invoice, total);    sendConfirmationEmail(invoice);}

private void validateInvoice(Invoice invoice) { if (invoice.getCustomer() == null) throw new IllegalArgumentException(); if (invoice.getItems().isEmpty()) throw new IllegalStateException();}

private double calculateTotal(Invoice invoice) { // गणना तर्क return invoice.getItems().stream() .mapToDouble(Item::getPrice) .sum();}

private void saveInvoice(Invoice invoice, double total) { // सहेजना}

private void sendConfirma

ब्लॉग

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