- Reflect - JavaScript | MDN
- The Reflect namespace object contains static methods for invoking interceptable JavaScript object internal methods. The methods are the same as those of proxy handlers.
Node.js का उपयोग करके सर्वर विकास करते समय, हमें कई बार Spring के आकर्षण का सामना करना पड़ता है।
क्योंकि यह संरचित, व्यवस्थित है और इसे आसानी से तोड़ना मुश्किल है।
इसलिए, Node.js के क्षेत्र में, Nest.js नामक एक फ्रेमवर्क का विकास हुआ है।
कम से कम Spring की तरह संरचित ढाँचे में सर्वर विकास करने की कई इच्छाएँ थीं।
लेकिन Spring का DI रनटाइम रिफ्लेक्शन का उपयोग करके भाषा स्तर पर DI करने में सहायता करता है।
Dotnet भी इसी तरह एट्रिब्यूट्स के आधार पर ट्रैकिंग करके रिफ्लेक्शन के द्वारा DI करता है।
तो Nest.js DI कैसे करता है?
Spring और Dotnet की आधार भाषा कम्पाइलर भाषाएँ हैं, इसलिए वे भाषा स्तर पर रिफ्लेक्शन का समर्थन करती हैं,
लेकिन ecma script तो केवल एक इंटरप्रेटर भाषा है, है ना?
नीचे Nest.js के ट्यूटोरियल में से एक उदाहरण दिया गया है।
निश्चित रूप से, TypeScript में लिखा गया यह कोड कम्पाइल होने पर टाइप टैग हटा देगा, और क्लास से कंस्ट्रक्टर के लिए आवश्यक आर्ग्यूमेंट टाइप नहीं पता होगा।
हल भाषा विनिर्देश में था।
Reflect
सौभाग्य से, भाषा स्तर पर प्रत्येक ऑब्जेक्ट में मेटाडेटा जोड़ने के लिए एक सुविधा बनाई गई थी।
यह केवल ऑब्जेक्ट में मेटाडेटा जोड़ने और प्राप्त करने का एक सरल कार्य है।
इसलिए, TypeScript ने सोचा।
तो, क्लास को कम्पाइल करते समय, क्या हम टाइप जानकारी को मेटाडेटा में जोड़ सकते हैं?
इसलिए, TypeScript क्लास डेकोरेटर वाले प्रत्येक स्थान पर क्लास के कंस्ट्रक्टर के लिए आवश्यक आर्ग्यूमेंट्स की जानकारी Reflect में संग्रहीत करता है।
यहाँ कोई ट्रांसफ़ॉर्म या ब्लैक मैजिक शामिल नहीं है, यह केवल TypeScript कम्पाइलर की एक सुविधा है।
इस प्रकार, यदि क्लास के मेटाडेटा में कंस्ट्रक्टर के लिए आवश्यक आर्ग्यूमेंट्स के प्रकार शामिल हैं,
हम क्लास को लोड करके टाइप जान सकते हैं, और उसे सीधे डाल सकते हैं।
इसके कार्यान्वयन के लिए आप NestJS देख सकते हैं, लेकिन यह बहुत लंबा है, इसलिए मैं एक अलग लाइब्रेरी सुझाऊँगा।
यह लाइब्रेरी Microsoft द्वारा बनाई गई है, इसलिए इसका कोड बहुत साफ है।
मैं इसे देखने की सलाह देता हूँ, और यहीं पर मैं यह लेख समाप्त करता हूँ।
टिप्पणियाँ0