मैं रेमो जानसन की किताब "लर्निंग टाइपस्क्रिप्ट" पढ़ रहा हूं। एक खंड में लेखक यह वर्णन करता है कि एक बहुत ही सरल प्रूफ-ऑफ-कॉन्सेप्ट MVC फ्रेमवर्क कैसे बनाया जाए, जिसमें Model
क्लास कैसे बनाएं और निम्नलिखित बातें कहते हैं:
एक मॉडल को उस वेब सेवा के URL के साथ प्रदान करना होगा जिसे वह उपभोग करता है। हम उपभोग किए जाने वाले सेवा का URL सेट करने के लिए ModelSettings नामक एक वर्ग सज्जाकार का उपयोग करने जा रहे हैं। हम इसके निर्माणकर्ता के माध्यम से सेवा URL को इंजेक्ट कर सकते हैं, लेकिन इसे एक कक्षा के माध्यम से डेटा को इंजेक्ट करने के लिए एक बुरा व्यवहार माना जाता है (एक व्यवहार के विपरीत) ।
मैं उस अंतिम वाक्य को नहीं समझता। विशेष रूप से, मुझे समझ नहीं आ रहा है कि "डेटा इंजेक्ट करने" का क्या अर्थ है। यह मुझे लगता है कि अधिक सरल उदाहरणों का उपयोग करके जावास्क्रिप्ट कक्षाओं में लगभग सभी परिचयों में, डेटा को अपने मापदंडों के माध्यम से कंस्ट्रक्टर में पेश किया जाता है ("इंजेक्शन")। उदाहरण के लिए:
class Person {
constructor(name) {
this.name = name;
}
}
मैं निश्चित name
रूप से डेटा के रूप में सोचता हूं , न कि व्यवहार के रूप में, और यह सार्वभौमिक रूप से इस तरह के उदाहरण में एक निर्माता पैरामीटर के रूप में शामिल है, और इसमें कोई उल्लेख नहीं है कि यह बुरा अभ्यास है। मैं इस प्रकार मान लेता हूं कि मैं उपरोक्त उद्धरण में कुछ गलत समझ रहा हूं, या तो "डेटा" या "इंजेक्शन" या कुछ और का मतलब है।
आपके उत्तरों में शामिल हो सकता है कि जावास्क्रिप्ट, टाइपस्क्रिप्ट में डेकोरेटर का उपयोग कब, कहाँ, कैसे और क्यों किया जाए, क्योंकि मुझे पूरी तरह से संदेह है कि अवधारणा अंतरंग समझ से जुड़ी है। हालांकि, इससे भी महत्वपूर्ण बात, मैं अधिक सामान्य रूप से समझना चाहता हूं कि क्लास कंस्ट्रक्टर के माध्यम से डेटा इंजेक्ट करने का क्या मतलब है और यह क्यों खराब है।
उपरोक्त उद्धरण के लिए अधिक संदर्भ देने के लिए, यह स्थिति है: एक Model
वर्ग बनाया जाता है, जो इस उदाहरण में, स्टॉक एक्सचेंज मॉडल बनाने के लिए उपयोग किया जाएगा, एक NASDAQ के लिए और एक NYSE के लिए। प्रत्येक मॉडल को वेब सेवा या स्थिर डेटा फ़ाइल के पथ की आवश्यकता होती है जो कच्चा डेटा प्रदान करेगी। पुस्तक में कहा गया है कि एक डेकोरेटर का उपयोग इस जानकारी के लिए किया जाना चाहिए, न कि एक निर्माण पैरामीटर के रूप में, निम्नलिखित के लिए अग्रणी:
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
मुझे समझ में नहीं आया है कि मुझे केवल निर्माणकर्ता के लिए एक पैरामीटर के बजाय डेकोरेटर के माध्यम से सेवा यूआरएल क्यों जोड़ना चाहिए, उदाहरण के लिए
constructor(metiator : IMediator, serviceUrl : string) {...