नवशिक्यांसाठी, कोणीतरी अँगुलरजेएस मधील सर्व्हिस, फॅक्टरी आणि प्रदात्यामधील फरक स्पष्टपणे स्पष्ट करू शकेल काय?


उत्तर 1:

एंग्युलरजेएस: सर्व्हर वि प्रदाता वि फॅक्टरीमधील फरक

आपण याचा शोध घेत असाल तर कदाचित आपण वापरण्यासाठी कोणता योग्य आहे हे शोधण्याचा प्रयत्न करीत आहात. किंवा आपण त्या तिघांना भेट दिली आहे आणि ते समान दिसत असल्यामुळे फरक निश्चित करण्याचा प्रयत्न करीत आहात.

आपल्याला असे वाटत असेल की ते समान आहेत - आपण बरोबर आहात. ते खूप समान आहेत. खरं तर, ते सर्व समान आहेत.

ते सर्व प्रदाता आहेत. कारखाना आणि सेवा ही प्रदात्याची काही विशिष्ट प्रकरणे आहेत परंतु आपण फक्त प्रदाता वापरुन आपल्यास पाहिजे असलेल्या सर्व गोष्टी पूर्ण करू शकता. मी तुला दाखवेन.

प्रदाता

आम्ही एक प्रदाता तयार करणार आहोत जो मूल्य परत करेल आणि ते मूल्य प्रदर्शित करेल, आपण हे कराल:

var mod = कोणीय.मोड्यूल ("मायमोड्यूल", []); mod.provider ("मायप्रोवाइडर", फंक्शन () {हे. $ get = फंक्शन () "" माझे मूल्य "परत करा;};}); मॉड कॉन्ट्रॉलर ("मायकंट्रोलर", फंक्शन (मायप्रॉव्हिडर) so कन्सोल.लॉग ("मायकंट्रोलर - मायप्रोवाइडर:" + मायप्रोव्हाइडर);}); कन्सोल आउटपुट मायकंट्रोलर - मायप्रोव्हाइडर: माझे मूल्य

कार्यरत इंटरएक्टिव्ह उदाहरण यावर आढळू शकतेः जेएस फिडल.

तेथे, म्हणूनच “प्रदाता” मूलभूत आपण मूल्य प्रदान करू या. ते मूल्य काहीही असू शकते. या प्रकरणात ही "माझे मूल्य" च्या मूल्यासह एक स्ट्रिंग आहे परंतु हे कार्य किंवा ऑब्जेक्ट सहजपणे असू शकते.

पुढील कोड नमुन्यांमधील टीप मी वगळणार आहे कोड उतारे लहान ठेवण्याच्या उद्देशाने टॅग आणि मोडची व्याख्या.

टोकदारला फक्त एकदाच मूल्य मिळते

लक्षात ठेवा की केवळ कोनीय केवळ एकदाच मूल्य मिळवितो, प्रदात्याने किती वेळा इंजेक्शन दिले तरीही. याचा अर्थ असा की एकदा $ गेट () एकदाच कॉल करतो, $ गेट () द्वारे प्रदान केलेले मूल्य संचयित करते आणि प्रत्येक वेळी आपल्याला समान संग्रहित मूल्य देते.

मला काय म्हणायचे आहे ते दर्शविण्यासाठी मी दुसरा कंट्रोलर तयार करीन आणि कन्सोल स्टेटमेंटद्वारे प्रदाता पुन्हा इंजेक्ट करीन जेणेकरून आपण काय चालले आहे ते पाहू शकाल.

mod.provider ("मायप्रोवाइडर", फंक्शन () {हे. $ get = फंक्शन () so कन्सोल.लॉग ("मायप्रोवाइडर फंक्शन. $ get () म्हणतात."); // ही ओळ परत "माझे मूल्य" जोडा; ue; }); मॉड कॉन्ट्रॉलर ("मायकंट्रोलर", फंक्शन (मायप्रॉव्हिडर) so कन्सोल.लॉग ("मायकंट्रोलर - मायप्रोवाइडर:" + मायप्रोव्हाइडर);}); mod.controller ("मायकंट्रोलर 2", फंक्शन (मायप्रॉव्हिडर) {// या कंट्रोलर कन्सोल.लॉग ("मायकंट्रोलर 2 - मायप्रॉव्हिडर:" + मायप्रॉव्हिडर);}) जोडा; कन्सोल आऊटपुट मायप्रोवाइडर फंक्शन. $ मिळवा () कॉल केले. मायकंट्रोलर - मायप्रोव्हाइडर: माझे मूल्य मायकंट्रोलर 2 - मायप्रोव्हाइडर: माझे मूल्य

जेएस फिडल मध्ये उघडा

आपण पाहू शकता की $ get () फंक्शन फक्त एकदाच कॉल केले गेले होते.

लक्षात ठेवा की आम्ही प्रदात्यासाठी फक्त $ get () नावाची पद्धत तयार करण्याच्या उद्देशाने कोडचा एक समूह लिहिला. दुसर्‍या फंक्शनची व्याख्या करणारे फंक्शन कोणीय देण्याऐवजी त्याऐवजी त्यास थेट कार्य करू इच्छित फंक्शन का देत नाही? बरं तुम्ही हे करू शकता, यालाच अँगुलर कारखाना म्हणतो.

कारखाना

फॅक्टरीमध्ये आपण फक्त $ गेट मेथडसाठी फंक्शन बॉडी प्रदान करता आणि बाकीचे एंग्युलर करते. खाली नवीन कोड कसा दिसतो ते खालीलप्रमाणे आहे आपण हे पहाल की अगदी तशाच वागतात.

मॉड.फैक्टरी ("मायप्रॉव्हिडर", फंक्शन () {// बदललेले "प्रदाता" ते "फॅक्टरी" कन्सोल.लॉग ("फॅक्टरी फंक्शन म्हणतात."); "माझे मूल्य" परत द्या;}); मॉड कॉन्ट्रॉलर ("मायकंट्रोलर", फंक्शन (मायप्रॉव्हिडर) so कन्सोल.लॉग ("मायकंट्रोलर - मायप्रोवाइडर:" + मायप्रोव्हाइडर);}); मॉड कॉन्ट्रोलर ("मायकंट्रोलर 2", फंक्शन (मायप्रॉव्हिडर) so कन्सोल.लॉग ("मायकंट्रोलर 2 - मायप्रॉव्हिडर:" + मायप्रोव्हाइडर);}); कॉन्सोल आउटपुट फॅक्टरी फंक्शन कॉल केले. मायकंट्रोलर - मायप्रोव्हाइडर: माझे मूल्य मायकंट्रोलर 2 - मायप्रोव्हाइडर: माझे मूल्य

जेएस फिडल मध्ये उघडा

आता आपण विचार करत असाल की जर आपण कमी कोड असलेल्या फॅक्टरीमध्ये समान गोष्ट पूर्ण करू शकत असाल तर आपण कधीही प्रदाता का वापराल? याची अनेक कारणे आहेत आणि मी त्या नंतर पुढे जाईन, आत्ता मला या पोस्टच्या शीर्षकाशी खरे रहायचे आहे आणि या दोन (प्रदाता आणि कारखाना) आणि सेवा यांच्यातील फरक सोडवायचा आहे.

आतापर्यंत आम्ही एक साधी स्ट्रिंग व्हॅल्यू परत केली आहे, परंतु प्रत्यक्षात आपल्याला बहुतेक वेळ परत करायचा आहे ही एक वस्तू आहे. बरं हे आमचे उदाहरण बदलणार नाही आम्ही त्याऐवजी एखाद्या ऑब्जेक्टसह परत आहोत त्या स्ट्रिंगची सहज बदल करू शकतो.

उदाहरणार्थ getValue () नामक फंक्शन असलेल्या ऑब्जेक्टला परत करून हे करूया. आता जावास्क्रिप्टमध्ये आपण ऑब्जेक्ट तयार करण्याचे बरेच मार्ग आहेत, आम्ही "ऑब्जेक्ट कन्स्ट्रक्टर" दृष्टीकोन वापरणार आहोत जिथे आपण एखादे फंक्शन तयार करतो जे ऑब्जेक्टला प्रॉपर्टीज आणि फंक्शन्ससह लोकप्रिय करते आणि नवीन कीवर्ड वापरुन ते इंस्टेंट करते.

फंक्शन मायओब्जेक्ट () {// आमचे ऑब्जेक्ट कंस्ट्रक्टर हे एड करा. बिल्ड व्हॅल्यू = फंक्शन () "" माझे मूल्य "परत करा; }; . मॉड.फैक्टरी ("मायप्रॉव्हिडर", फंक्शन () {कन्सोल.लॉग ("फॅक्टरी फंक्शन म्हणतात.")) नवीन मायओब्जेक्ट परत (); // आमच्या ऑब्जेक्टचे उदाहरण तयार करा}); mod.controller ("मायकंट्रोलर", फंक्शन (मायप्रॉव्हिडर) {कन्सोल.लॉग ("मायकंट्रोलर - मायप्रोव्हाइडर:" + मायप्रोवाइडर.वेट व्हॅल्यू ()); // getValue () call) कॉल करण्यासाठी बदलले गेले; mod.controller ("मायकंट्रोलर 2", फंक्शन (मायप्रॉव्हिडर) so कन्सोल.लॉग ("मायकंट्रोलर 2 - मायप्रोव्हाइडर:" + मायप्रॉव्हिडर.जेट व्हॅल्यू ()); // getValue () call) कॉल करण्यासाठी बदलले आहे; कॉन्सोल आउटपुट फॅक्टरी फंक्शन कॉल केले. मायकंट्रोलर - मायप्रोव्हाइडर: माझे मूल्य मायकंट्रोलर 2 - मायप्रोव्हाइडर: माझे मूल्य

जेएस फिडल मध्ये उघडा

आता मला यासंदर्भात एक लहान चिमटा काढायचा आहे कारण ते पुढील संकल्पनेत चांगले जाईल. आमच्या उदाहरणात आम्ही "ऑब्जेक्ट कन्स्ट्रक्टर" फंक्शन मायओब्जेक्ट () तयार करतो, परंतु आम्ही केवळ एका जागी हे इंस्टेंट करीत असल्यामुळे त्याऐवजी अनामिक फंक्शन वापरू शकतो.

हे एक अतिशय लहान चिमटा आहे. त्याऐवजीः

फंक्शन मायओब्जेक्ट () {this.getValue = फंक्शन () "" माझे मूल्य "परत; }; } मॉड.फैक्टरी ("मायप्रॉव्हिडर", फंक्शन () {कन्सोल.लॉग ("फॅक्टरी फंक्शन म्हणतात."); नवीन मायओब्जेक्ट ();}) परत करा;

आम्ही हे करतोः

मॉड.फैक्टरी ("मायप्रॉव्हिडर", फंक्शन () {कन्सोल.लॉग ("फॅक्टरी फंक्शन म्हणतात.")) परत करा नवीन फंक्शन () {// आमच्या ऑब्जेक्ट कन्स्ट्रक्टरला इन .getValue = फंक्शन () LIN "माझे मूल्य" परत करा; };};});

तर आता संपूर्ण गोष्ट अशी दिसते:

मॉड.फैक्टरी ("मायप्रॉव्हिडर", फंक्शन () {कन्सोल.लॉग ("फॅक्टरी फंक्शन म्हणतात.")) परत करा नवीन फंक्शन () {// आमच्या ऑब्जेक्ट कन्स्ट्रक्टरला इन .getValue = फंक्शन () LIN "माझे मूल्य" परत करा; };};}); मॉड कॉन्ट्रोलर ("मायकंट्रोलर", फंक्शन (मायप्रॉव्हिडर) so कन्सोल.लॉग ("मायकंट्रोलर - मायप्रोव्हाइडर:" + मायप्रॉव्हिडर.वेट व्हॅल्यू ());}); मॉड कॉन्ट्रोलर ("मायकंट्रोलर 2", फंक्शन (मायप्रॉव्हिडर) so कन्सोल.लॉग ("मायकंट्रोलर 2 - मायप्रोव्हाइडर:" + मायप्रॉव्हिडर.जेट व्हॅल्यू ());});

जेएस फिडल मध्ये उघडा

आता आपला संपूर्ण कारखाना एकाच वस्तूंनी बनलेला आहे, तर त्या गमतीशीर फॅक्टरी लिहिण्याऐवजी आपण केवळ एंग्युलरला ऑब्जेक्ट कन्स्ट्रक्टर फंक्शन देऊ शकलो तर ते बरे होणार नाही का? ठीक आहे, आपण नशीब आहात, हीच सेवा आहे.

आपल्या सेवेत

कारखान्याऐवजी सेवा वापरण्याशिवाय हाच कोड आहे.

mod.service ("मायप्रोवाइडर", फंक्शन () {// बदललेले "फॅक्टरी" ते "सर्व्हिस" // लक्षात घ्या की फक्त फंक्शन पास केले जात आहे. या व्हॅल्यू = फंक्शनच्या आधीचे ऑब्जेक्ट कन्स्ट्रक्टर)) "माझे मूल्य" परत करा. ;};}); मॉड कॉन्ट्रोलर ("मायकंट्रोलर", फंक्शन (मायप्रॉव्हिडर) so कन्सोल.लॉग ("मायकंट्रोलर - मायप्रोव्हाइडर:" + मायप्रॉव्हिडर.वेट व्हॅल्यू ());}); मॉड कॉन्ट्रोलर ("मायकंट्रोलर 2", फंक्शन (मायप्रॉव्हिडर) so कन्सोल.लॉग ("मायकंट्रोलर 2 - मायप्रोव्हाइडर:" + मायप्रॉव्हिडर.जेट व्हॅल्यू ());}); कन्सोल आउटपुट मायकंट्रोलर - मायप्रोव्हाइडर: माझे मूल्य मायकंट्रोलर 2 - मायप्रोव्हाइडर: माझे मूल्य

जेएस फिडल मध्ये उघडा

प्रदाता वि कारखाना वि सेवा

म्हणून सारांश, प्रदाता, कारखाना आणि सेवा सर्व प्रदाता आहेत. जेव्हा आपल्याला आपल्या प्रदात्यामध्ये आवश्यक ते सर्व $ get () फंक्शन असते तेव्हा फॅक्टरी प्रदात्याचे विशेष प्रकरण असते. हे आपल्याला कमी कोडसह लिहू देते. जेव्हा आपल्याला नवीन ऑब्जेक्टची उदाहरणे परत मिळवायची असतील तेव्हा कमी कोड लिहिण्याच्या त्याच फायद्यासह सर्व्हिस ही फॅक्टरीची एक खास बाब असते.

दुसर्‍या विरूद्ध कधी वापरायचे?

उत्तर असे आहे की आपण आपले ध्येय गाठण्यासाठी सर्वात खास आवृत्ती वापरत आहात. उदाहरणार्थ सांगा की आपण विद्यमान ऑब्जेक्ट परत कोठेही परिभाषित केले आहे जे कन्स्ट्रक्टर वितर्क घेईल. आपण सेवेवर वितर्क पास करू शकत नाही, म्हणून आपण त्याऐवजी कारखान्यासह कॉल कराल.

मॉड.फैक्टरी ("मायप्रोव्हाइडर", फंक्शन () so कन्सोल.लॉग ("फॅक्टरी फंक्शन म्हणतात.")) नवीन परत द्या सॉमसेजबॉक्सक्लास ("सानुकूल वितर्क");});

प्रदाता आणि कारखाना दरम्यान निर्णय घेण्याचा मुख्य घटक म्हणजे आपण ऑब्जेक्ट तयार होण्यापूर्वी व्युत्पन्न करण्यापूर्वी त्यास कॉन्फिगर करण्यास सक्षम व्हायचे की नाही. आपण मॉड्यूलकॉन्फिग () वर कॉल करून आणि प्रदात्यास स्वतः उदाहरण देऊन (प्रदात्याने परत केलेल्या ऑब्जेक्टऐवजी). आपण आपल्या प्रदात्याच्या इंजेक्शन घेत असताना त्याच्या नावाच्या शेवटी “प्रदाता” जोडून हे करा.

आपण हे कसे करता त्याचे एक उदाहरण येथे आहे:

mod.provider ("मायप्रोवाइडर", फंक्शन () {this.value = "माझे मूल्य"; this.setValue = फंक्शन (नवीन व्हॅल्यू) {this.value = newValue; this; हे. $ get = फंक्शन () this हे परत करा. मूल्य; }; }); मॉड कॉन्ट्रॉलर ("मायकंट्रोलर", फंक्शन (मायप्रॉव्हिडर) {कन्सोल.लॉग ("मायकंट्रोलर - मायप्रोवाइडर:" + मायप्रोव्हाइडर);}); mod.config (फंक्शन (मायप्रॉव्हिडरप्रॉव्हिडर) {// एडीडीएड कॉन्फिगरेशन सेक्शन // अतिरिक्त "प्रदाता" प्रत्यय मायप्रोवाइडरप्रोइडर.सेटव्हॅल्यू ("नवीन मूल्य");}) लक्षात ठेवा;

त्यामध्ये प्रदाता, कारखाना आणि सेवा हे तीन प्रदाते कधी वापरावे हे समाविष्टीत आहे. येथे एक अतिरिक्त प्रदाता आहे जो येथे नमूद केलेला नाही जो आणखी एक विशेष प्रकरण आहे आणि तो मूल्य प्रदाता आहे.

आपल्याला आठवत असेल की जेव्हा आम्ही प्रथम वर फॅक्टरी प्रदात्याची ओळख करुन दिली तेव्हा आम्ही स्ट्रिंग मूल्य परत करण्याचे साधे उदाहरण दिले. असे दिसले:

मॉड.फैक्टरी ("मायप्रोव्हाइडर", फंक्शन () "" माझे मूल्य "परत करा;});

तसेच आम्ही त्याऐवजी मूल्य प्रदाता वापरुन हे करू शकलो असतो, पुन्हा त्याचा फायदा आपण त्यास कमी कोडमध्ये करू शकता. खाली दिलेला कोड वरील कोड प्रमाणेच करतो:

mod.value ("मायप्रोव्हाइडर", "माझे मूल्य");

मग आपण दुसर्‍या विरूद्ध कधी वापराल? संभाव्यत: जेव्हा आपण काही अन्य डेटावर आधारित मूल्य मोजू इच्छित असाल तर आपण फॅक्टरीप्रोइडर वापरेल, उदाहरणार्थ दुसर्‍या मूल्य प्रदात्याकडून किंवा बाह्य स्रोतांकडील डेटा. आणि / किंवा जेव्हा आपण प्रथम विनंती केली तेव्हाच वॅल्यूची गणना करू इच्छित आहात. येथे काही उदाहरणे दिली आहेत:

// जेथे फॅक्टरी "मूल्य" प्रदाता मोडवर अवलंबून असते. उदाहरण ("एकाधिक", 3); मोड.फैक्टरी ("मूल्य", फंक्शन (एकाधिक) {रिटर्न 10 * मल्टीपल;}); // उदाहरण जेथे फॅक्टरी बाह्य डेटा मॉडेमवर अवलंबून असते. फॅक्टरी ("मूल्य", फंक्शन (एकाधिक) {var एकाधिक = getDateFromExternPage (); 10 * एकाधिक; return) परत करा;

मी असे सूचित केले आहे की ते मूल्य फक्त इतर प्रदाता आहे? मी खोटे बोललो, आणखी एक गोष्ट आहे जी दोन किरकोळ भिन्नता असलेल्या मूल्यांशी एकरूप आहे. त्या प्रदात्यास स्थिर म्हणतात.

मूल्य आणि स्थिर दरम्यान फरक असा आहे की कॉन्फिगरेशनच्या टप्प्यात स्थिर वापरुन निर्दिष्ट केलेले मूल्य उपलब्ध असते. आपणास पूर्वीचे लक्षात येईल की मी हा उल्लेख केला आहे की प्रदाता कॉन्फिगरेशन टप्प्यात प्रवेश करण्यायोग्य होता परंतु सेवा आणि फॅक्टरी नव्हत्या.

पण ते मूल्य आणि स्थिरतेसाठी समान आहे. कॉन्फिगरेशन टप्प्यातून स्थिर उपलब्ध आहे आणि मूल्य नाही. दुसरा फरक असा आहे की नावानुसार आपण एका स्थिरचे मूल्य बदलू शकत नाही. आपण त्याला नियुक्त केलेले प्रथम मूल्य ते ठेवते मूल्य आहे, आपण नंतर त्यास भिन्न मूल्य निर्दिष्ट करण्याचा प्रयत्न केला तर त्याकडे दुर्लक्ष केले जाईल.

येथे एक उदाहरण आहे:

mod.value ("मायव्हॅल्यू", "प्रथम असाइनमेंट"); mod.value ("मायव्हॅल्यू", "द्वितीय असाइनमेंट"); mod.constant ("मायकॉन्स्टंट", "प्रथम असाइनमेंट"); mod.constant ("मायकॉन्स्टंट", "द्वितीय असाइनमेंट"); मॉडेकंट्रोलर ("मायकंट्रोलर", फंक्शन (मायव्हील्यू, मायकॉन्स्टंट) so कन्सोल.लॉग ("मायव्हील्यू:" + मायव्हॅल्यू); कन्सोल.लॉग ("मायकॉन्स्टंट:" + मायकॉन्स्टंट);}); कन्सोल आऊटपुट मायव्हल्यू: दुसरा असाइनमेंट मायकॉन्स्टंट: प्रथम असाइनमेंट

प्रत्येक कधी वापरायचा याचा सारांश येथे आहे:

मूल्य

आपण एक साधे शाब्दिक मूल्य प्रदान करीत आहात.

mod.value ("मायव्हॅल्यू", 10);
    

स्थिर

आपल्याला कॉन्फिगरेशन टप्प्यात त्या मूल्यापर्यंत प्रवेश करण्यात सक्षम असणे आवश्यक आहे. (.config () वापरुन)

mod.constant ("मायव्हॅल्यू", 10); mod.config (फंक्शन (मायव्हॅल्यू) {कन्सोल.लॉग (मायव्हॅल्यू);});

कारखाना

आपण प्रदान करीत असलेल्या मूल्याची गणना इतर डेटाच्या आधारे करणे आवश्यक आहे.

मॉड.फैक्टरी ("मायफैक्टरी", फंक्शन () {रिटर्न 10;});
        

सेवा

आपण पद्धतींसह एखादी वस्तू परत करत आहात.

mod.service ("माय सर्व्हिस", फंक्शन () {वार नाव = "बॉब"; this.setName = फंक्शन (newName) {this.name = newName;}; this.getName = फंक्शन () this हे.नाव परत द्या;} });
        

प्रदाता

आपण कॉन्फिगर करण्यास सक्षम होऊ इच्छित आहात, कॉन्फिगरेशन टप्प्या दरम्यान, ऑब्जेक्ट तयार होण्यापूर्वी तयार केले जाईल.

mod.provider ("ग्रीटर", फंक्शन () {वार नाव; this.setName = फंक्शन (newName) {नाव = newName;}; हे. $ get = फंक्शन () new नवीन फंक्शन परत () {this.sayHi = फंक्शन () so कन्सोल.लॉग ("हाय" + नाव;};};};}); मॉडेकॉनफिग (फंक्शन (ग्रीटरप्रोइडर) {ग्रिटरप्रोवाइडर.सेटनेम ("जॉन");});
        

येथे शेवटच्या वेळी पॉईंट होम चालविण्याकरिता फॅक्टरी, मूल्य आणि सेवा भाग असलेल्या प्रदात्याची प्रतिमा आहे:


उत्तर 2:

इंटर्नर अँगुलरजेएस सर्व्हिस ऑब्जेक्ट तयार करण्यासाठी फॅक्टरी वापरत आहे आणि फॅक्टरी ऑब्जेक्ट तयार करण्यासाठी प्रदाता वापरतो.

एक कारखाना करतो,

  1. एखादा ऑब्जेक्ट / इन्स्टेंस तयार करा / तयार केलेले ऑब्जेक्ट प्रारंभ करा / तयार केलेला ऑब्जेक्ट / उदाहरण पुन्हा तयार करा

संदर्भ सेट करण्यासाठी, ularब्यूलर फॅक्टरी डिझाइन पॅटर्न म्हणून अँगुलर फॅक्टरीचा विचार करा. एंग्युलर जेएस आपल्याला आपल्या कारखान्याची पद्धत वापरुन आपल्या आवडीचे ऑब्जेक्ट तयार करण्याचा पर्याय देते, आपण अनुप्रयोगासाठी सेवा म्हणून वापरण्यासाठी तयार केलेली ऑब्जेक्ट परत करता.

उदाहरणार्थ, आपल्याकडे दोन पेमेंट गेटवे दरम्यान पर्याय आहेत, कोणीतरी आपला कोड / लायब्ररी वापरत असेल तर आपली फॅक्टरी पद्धत पेपल किंवा स्ट्राइप ऑब्जेक्ट तयार करावी की नाही याची निवड करू शकते. हे अ‍ॅबस्ट्रॅक्ट फॅक्टरीसारखेच आहे, पेमेंट सर्व्हिसच्या वापरकर्त्यांना पेमेंट गेटवेसाठी कोणती सेवा वापरली जात आहे हे माहित नाही.

var मायमोड्यूल = अँगुलर.मोड्यूल ('मायमोड्यूल', []); मायमोड्यूल कॉन्स्टंट (“पेमेंटगेटवेनेम”, “स्ट्रिप”); // किंवा "पेपल" मायमोड्यूल.फैक्टरी ('पेमेंटस सर्व्हिस', फंक्शन (पेमेंटगेटवे नेम) payment वार पेमेंटसर्व्हिसेस; // आपण व्यवसायाची गरज यावर आधारित कोणता ऑब्जेक्ट तयार करायचा ते ठरवितात // स्ट्राइपगेटवे आणि पेपलगेटवे जावास्क्रिप्ट क्लासेस आहेत // मध्ये गेटवे विशिष्ट अंमलबजावणी असेल तर ( पेमेंटगेटवेनेम == "स्ट्रिप") {पेमेंटस सर्व्हिस = नवीन स्ट्राइपगेटवे (); // पट्टी गेटवे सुरू करण्यासाठी सानुकूल कोड (अन्यथा (पेमेंटगेटवेनाव == "पेपल") {पेमेंटसेवा = नवीन पेपलगेटवे (); पेपल आरंभ करण्यासाठी सानुकूल कोड} / / देयक आरंभ करण्यासाठी सानुकूल कोडसेवा रिटर्न पेमेंट सर्व्हिस;});

सर्व्हिस कोड यासारखा दिसेल, तुम्हाला “हा” कीवर्ड लक्षात येईल, याचा अर्थ, तुमच्यासाठी अँगुलर कोअरने ऑब्जेक्ट आधीपासूनच तयार केला आहे, यापुढे तुम्हाला ऑब्जेक्ट क्रिएशन नियंत्रण नाही.

var मायमोड्यूल = अँगुलर.मोड्यूल ('मायमोड्यूल', []); myModule.service ('कॅशे', फंक्शन () local var लोकल व्हेरिएबल = ""; // या.कॅचेसाईझ = 5; // 5 एमबी बाहेर प्रवेश करणे शक्य नाही. 5 एमबी. ऑब्जेक्ट्स आकार = 1000; // जास्तीत जास्त 1000 ऑब्जेक्ट्स या.पुट = फंक्शन) (की, मूल्य) {...} this.get = फंक्शन (मिळवा) {रिटर्न ...}});

उत्तर 3:

अँगुलरजेएस मधील मोठा प्रश्नः सर्व्हिस वि फॅक्टरी विरुद्ध प्रदाता. मी काय वापरावे?

इंटरनेटवर बरीच संसाधने आहेत जी या विषयावर चर्चा करतात. हे निष्कर्ष काढले की हा प्रश्न दर आठवड्यात किंवा त्याही वेगवेगळ्या चॅनेलवर पॉप अप करतो आणि स्टॅकओव्हरफ्लोवरील शीर्ष दहा उत्तरे वाचल्यानंतरही अद्याप ते फारसे स्पष्ट नाही.

आपल्याला असे वाटत असेल की ते समान आहेत - आपण बरोबर आहात. ते खूप समान आहेत. खरं तर, ते सर्व समान आहेत. ते सर्व प्रदाता आहेत.

संपूर्ण लेख वाचा -> अँगुलर जेएस: सर्व्हिस व्ही / एस फॅक्टरी v / s प्रदाता - 15 मिनिटांत मुलाखत सज्ज व्हा