लेगेसी JavaScript कोड का रीफैक्टरिंग: अराजकता को कैसे व्यवस्थित करें
लेगेसी कोड के साथ काम करना डेवलपर के जीवन का एक अपरिहार्य हिस्सा है। देर-सबेर, हर किसी को एक ऐसा प्रोजेक्ट मिलता है जो पुराने JavaScript में लिखा गया है, जहाँ वेरिएबल्स को a1, temp या data कहा जाता है, और लॉजिक एक फ़ाइल में सैकड़ों पंक्तियों के नीचे दबा होता है। ऐसे कोड का रीफैक्टरिंग न केवल पठनीयता में सुधार करता है - यह रखरखाव की लागत को कम करता है, नई सुविधाओं को जोड़ने में तेजी लाता है और बग की संख्या को कम करता है।
इस लेख में, हम चर्चा करेंगे कि Node.js वातावरण में लेगेसी JavaScript कोड के रीफैक्टरिंग के लिए कैसे संपर्क करें, किन उपकरणों का उपयोग करें और कार्यशील सिस्टम को कैसे न तोड़ें।
लेगेसी कोड खतरनाक क्यों है और इसे रीफैक्टर क्यों करना चाहिए
लेगेसी कोड (अंग्रेज़ी legacy से - विरासत) वह कोड है जो पहले से प्रोडक्शन में काम कर रहा है, लेकिन आधुनिक मानकों के उल्लंघन में, बिना परीक्षणों के और खराब आर्किटेक्चर के साथ लिखा गया है। ऐसे कोड की मुख्य समस्याएँ:
- समझने में कठिनाई। मॉड्यूलरिटी की कमी, लंबे फंक्शन, मैजिक नंबर।
- उच्च युग्मन (High coupling)। एक हिस्से में बदलाव दूसरे, पहली नज़र में असंबंधित हिस्से को तोड़ देता है।
- परीक्षणों का अभाव। कोई भी बदलाव एक जोखिम है।
- पुराने पैटर्न।
const/letके बजायvarका उपयोग, callback hell, async/await की कमी।
रीफैक्टरिंग का मतलब सब कुछ शून्य से फिर से लिखना नहीं है। यह इसके बाहरी व्यवहार को बदले बिना कोड में क्रमिक सुधार है। लक्ष्य कोड को साफ, सुरक्षित और रखरखाव में आसान बनाना है।
रीफैक्टरिंग रणनीति: कहाँ से शुरू करें
कोड बदलने से पहले, एक योजना विकसित करना आवश्यक है। अव्यवस्थित संपादन केवल स्थिति को खराब करेंगे। यहाँ एक सिद्ध रणनीति है:
- वर्तमान व्यवहार का दस्तावेजीकरण करें। लिखें कि प्रत्येक फंक्शन क्या करता है, यह कौन सा इनपुट डेटा अपेक्षा करता है और क्या लौटाता है।
- परीक्षण लिखें। भले ही कोई यूनिट टेस्ट न हों, इंटीग्रेशन टेस्ट लिखें जो मुख्य परिदृश्यों की जाँच करते हैं।
jestयाmochaका उपयोग करें। - परिवर्तनों को अलग करें। एक बार में एक मॉड्यूल या फंक्शन पर काम करें। एक साथ सब कुछ रीफैक्टर करने का प्रयास न करें।
- छोटे कदम उठाएँ। एक बदलाव - एक कमिट। अगर कुछ टूटता है, तो वापस लौटना आसान है।
उदाहरण: आपके पास एक फंक्शन है जो फ़ाइल से डेटा प्रोसेस करता है और परिणाम सहेजता है। पहले एक परीक्षण लिखें जो जाँचता है कि इनपुट फ़ाइल A के लिए आउटपुट फ़ाइल B मिलती है। फिर अंदरूनी भाग को रीफैक्टर करें।
लेगेसी JavaScript की सामान्य समस्याएँ और उनके समाधान
1. Callback hell → async/await
पुराने Node.js कोड में सबसे आम समस्याओं में से एक नेस्टेड कॉलबैक हैं। वे कोड को अपठनीय और डीबग करने में कठिन बनाते हैं।
खराब कोड:
function getUserData(userId, callback) { db.query('SELECT * FROM users WHERE id = ?', [userId], function(err, user) { if (err) return callback(err); db.query('SELECT * FROM orders WHERE user_id = ?', [user.id], function(err, orders) { if (err) return callback(err); callback(null, { user, orders }); }); });}रीफैक्टरिंग के बाद:
async function getUserData(userId) { const user = await db.query('SELECT * FROM users WHERE id = ?', [userId]); const orders = await db.query('SELECT * FROM orders WHERE user_id = ?', [user.id]); return { user, orders };}कोड छोटा, स्पष्ट और डीबग करने में आसान हो गया है। त्रुटियों को try/catch के माध्यम से संभाला जाता है।
2. ग्लोबल वेरिएबल्स और म्यूटेशन
लेगेसी कोड में अक्सर ग्लोबल वेरिएबल्स पाए जाते हैं जो प्रोग्राम के विभिन्न भागों में बदले जाते हैं। इससे अप्रत्याशित साइड इफेक्ट होते हैं।
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें