AngularJS: कारखाने के बजाय सेवा का उपयोग कब करें


296

कृपया यहां मेरे साथ रहें। मुझे पता है कि अन्य उत्तर भी हैं जैसे: एंगुलरजेएस: सेवा बनाम प्रदाता बनाम कारखाना

हालाँकि मैं अभी भी यह पता नहीं लगा सकता कि आप कारखाने में सेवा का उपयोग कब करेंगे।

मैं जो बता सकता हूं कि कारखाने का उपयोग आमतौर पर "सामान्य" कार्यों को बनाने के लिए किया जाता है जिसे कई नियंत्रकों द्वारा बुलाया जा सकता है: सामान्य नियंत्रक फ़ंक्शन बनाना

कोणीय डॉक्स प्रतीत होता है कि सेवा से अधिक कारखाने पसंद करते हैं। वे "सेवा" का भी उल्लेख करते हैं जब वे कारखाने का उपयोग करते हैं जो और भी अधिक भ्रमित होता है! http://docs.angularjs.org/guide/dev_guide.services.creating_services

तो सेवा का उपयोग कब होगा?

क्या ऐसा कुछ है जो केवल सेवा के साथ संभव या बहुत आसान है?

क्या कुछ अलग है जो पर्दे के पीछे चलता है? प्रदर्शन / स्मृति अंतर?

यहाँ एक उदाहरण है। घोषणा की विधि के अलावा, वे समान लगते हैं और मैं यह पता नहीं लगा सकता कि मैं एक बनाम दूसरे क्यों करूंगा। http://jsfiddle.net/uEpkE/

अद्यतन: थॉमस के उत्तर से यह प्रतीत होता है कि सेवा सरल तरीकों के लिए है और निजी तरीकों के साथ अधिक जटिल तर्क के लिए कारखाना है, इसलिए मैंने नीचे दिए गए कोड को अद्यतन किया और ऐसा लगता है कि दोनों निजी कार्यों का समर्थन करने में सक्षम हैं?

myApp.factory('fooFactory', function() {
    var fooVar;
    var addHi = function(foo){ fooVar = 'Hi '+foo; }

    return {
        setFoobar: function(foo){
            addHi(foo);
        },
        getFoobar:function(){
            return fooVar;
        }
    };
});
myApp.service('fooService', function() {
    var fooVar;
    var addHi = function(foo){ fooVar = 'Hi '+foo;}

    this.setFoobar = function(foo){
        addHi(foo);
    }
    this.getFoobar = function(){
        return fooVar;
    }
});

function MyCtrl($scope, fooService, fooFactory) {
    fooFactory.setFoobar("fooFactory");
    fooService.setFoobar("fooService");
    //foobars = "Hi fooFactory, Hi fooService"
    $scope.foobars = [
        fooFactory.getFoobar(),
        fooService.getFoobar()
    ];
}

बेशक सेवा निजी का समर्थन करती है, लेकिन यदि आप मेरी पोस्ट को सही ढंग से पढ़ते हैं तो यह पूरी तरह से कोड शैली है: हम "निजी" चर का अनुकरण करने के लिए एक नए शाब्दिक दायरे का लाभ भी उठा सकते हैं। यह "SIMULATE" है
थॉमस पोंस

मुझे यह चर्चा बहुत उपयोगी stackoverflow.com/questions/15666048/…
आनंद गुप्ता

जवाबों:


280

व्याख्या

आपको यहां अलग-अलग चीजें मिलीं:

प्रथम:

  • यदि आप किसी सेवा का उपयोग करते हैं, तो आपको एक फ़ंक्शन (" this" कीवर्ड) का उदाहरण मिलेगा ।
  • यदि आप किसी कारखाने का उपयोग करते हैं, तो आपको फ़ंक्शन संदर्भ (फ़ैक्टरी में रिटर्न स्टेटमेंट) को लागू करने के द्वारा लौटाया जाने वाला मान मिलेगा ।

Ref: angular.service vs angular.factory

दूसरा:

एंगुलरजेएस में सभी प्रदाताओं को ध्यान में रखें (मूल्य, स्थिर, सेवाएं, कारखाने) एकल हैं!

तीसरा:

एक या दूसरे (सेवा या कारखाने) का उपयोग करना कोड शैली के बारे में है। लेकिन, AngularJS में आम तरीका फैक्ट्री का उपयोग करना है ।

क्यों ?

क्योंकि "फैक्टरी विधि ऑब्जेक्ट्स को AngularJS निर्भरता इंजेक्शन सिस्टम में प्राप्त करने का सबसे आम तरीका है। यह बहुत लचीला है और इसमें परिष्कृत निर्माण तर्क हो सकता है। चूंकि कारखाने नियमित कार्य हैं, इसलिए हम इस निजी का अनुकरण करने के लिए एक नए शाब्दिक दायरे का लाभ भी उठा सकते हैं।" "चर। यह बहुत उपयोगी है क्योंकि हम किसी दिए गए सेवा के कार्यान्वयन विवरण छिपा सकते हैं।"

( रेफरी : http://www.amazon.com/Mastering-Web-Application-Development-AngularJS/dp/1782161821 )।


प्रयोग

सेवा: उपयोगिता कार्यों को साझा करने के लिए उपयोगी हो सकती है जो केवल ()इंजेक्शन फ़ंक्शन संदर्भ में संलग्न करके उपयोगी हैं । के साथ injectedArg.call(this)या समान चलाया जा सकता है ।

फैक्ट्री: एक 'क्लास' फंक्शन लौटाने के लिए उपयोगी हो सकती है जो तब नए उदाहरण बनाने के लिए नया हो सकता है।

इसलिए, जब आप अपनी सेवा में जटिल तर्क रखते हैं तो एक कारखाने का उपयोग करें और आप इस जटिलता को उजागर नहीं करना चाहते हैं

अन्य मामलों में यदि आप किसी सेवा का उदाहरण वापस करना चाहते हैं तो सेवा का उपयोग करें

लेकिन आप समय के साथ देखेंगे कि आप मेरे विचार से 80% मामलों में कारखाने का उपयोग करेंगे।

अधिक जानकारी के लिए: http://blog.manishchhabra.com/2013/09/angularjs-service-vs-factory-with-example/


अपडेट करें :

यहाँ उत्कृष्ट पोस्ट: http://iffycan.blogspot.com.ar/2013/05/angular-service-or-factory.html

"यदि आप चाहते हैं कि आपके फ़ंक्शन को सामान्य फ़ंक्शन की तरह कहा जाए , तो कारखाने का उपयोग करें । यदि आप चाहते हैं कि आपका फ़ंक्शन नए ऑपरेटर के साथ त्वरित हो, तो सेवा का उपयोग करें। यदि आप अंतर नहीं जानते हैं, तो कारखाने का उपयोग करें।"


अपडेट करें :

AngularJS टीम अपना काम करती है और एक स्पष्टीकरण देती है: http://docs.angularjs.org/guide/providers

और इस पेज से:

"फैक्टरी और सेवा सबसे अधिक उपयोग की जाने वाली रेसिपी हैं। उनके बीच एकमात्र अंतर यह है कि कस्टम प्रकार की वस्तुओं के लिए सर्विस रेसिपी बेहतर काम करती है, जबकि फैक्ट्री जावास्क्रिप्ट प्रिमिटिव और फ़ंक्शंस का उत्पादन कर सकती है।"


7
रे फर्स्ट: मैंने पढ़ा है कि हर जगह लेकिन मुझे इसके व्यावहारिक निहितार्थ समझ में नहीं आते। मुझे लगता है कि आपके उत्तर से "अधिकांश भाग के लिए" कोई व्यावहारिक अंतर नहीं है? पुस्तक रेफरी के लिए धन्यवाद!
user1941747 8

यह आसान है अगर आपकी सेवा वास्तव में जटिल है और आपको निजी विधियों की आवश्यकता है और वस्तुओं का उपयोग एक कारखाने में किया जाता है
थॉमस पोंस

1
मैंने देखा कि आपने "यदि आप किसी सेवा का उपयोग करना चाहते हैं तो सेवा का एक उदाहरण वापस करना चाहते हैं"। मेरा अनुवर्ती प्रश्न यह होगा कि आप किसी सेवा का उदाहरण कैसे वापस करना चाहेंगे? मैं यहां एक विशिष्ट उपयोग-मामला खोजने की कोशिश कर रहा हूं।
user1941747

12
"चूंकि कारखाने नियमित कार्य हैं, इसलिए हम" निजी "चर को अनुकरण करने के लिए एक नए शाब्दिक दायरे का लाभ उठा सकते हैं।" - यह कारखानों के लिए विशिष्ट नहीं है, आप सेवाओं के साथ भी ऐसा ही कर सकते हैं ..
pootzko

लगता है कि google की टीम फैक्ट्री में सेवा करना पसंद करती है, इससे चीजें और भी भ्रामक हो जाती हैं! google-styleguide.googlecode.com/svn/trunk/…
xzhang

111

allernhwkim ने मूल रूप से इस सवाल का जवाब अपने ब्लॉग से जोड़ा , लेकिन एक मॉडरेटर ने इसे हटा दिया। यह एकमात्र ऐसा पद है जो मैंने पाया है जो आपको यह नहीं बताता है कि सेवा, प्रदाता और कारखाने के साथ एक ही काम कैसे करें, बल्कि यह भी बताता है कि आप एक प्रदाता के साथ क्या कर सकते हैं जिसे आप कारखाने के साथ नहीं कर सकते, और ऐसा कारखाना जिसे आप किसी सेवा से नहीं जोड़ सकते।

सीधे उनके ब्लॉग से:

app.service('CarService', function() {
   this.dealer="Bad";
    this.numCylinder = 4;
});

app.factory('CarFactory', function() {
    return function(numCylinder) {
      this.dealer="Bad";
        this.numCylinder = numCylinder
    };
});

app.provider('CarProvider', function() {
    this.dealerName = 'Bad';
    this.$get = function() {
        return function(numCylinder) {
            this.numCylinder = numCylinder;
            this.dealer = this.dealerName;
        }
    };
    this.setDealerName = function(str) {
      this.dealerName = str;
    }      
});

इससे पता चलता है कि CarService हमेशा 4 सिलेंडरों वाली कार का उत्पादन कैसे करेगी, आप इसे अलग-अलग कारों के लिए नहीं बदल सकते। जबकि CarFactory एक फ़ंक्शन देता है ताकि आप new CarFactoryअपने नियंत्रक में कर सकते हैं , उस कार के लिए विशिष्ट सिलेंडरों की संख्या में गुजर रहा है। आप नहीं कर सकते new CarServiceक्योंकि CarService एक ऐसा कार्य है जो एक फ़ंक्शन नहीं है।

कारण कारखाने इस तरह काम नहीं करते हैं:

app.factory('CarFactory', function(numCylinder) {
      this.dealer="Bad";
      this.numCylinder = numCylinder
});

और स्वचालित रूप से आप के लिए एक समारोह वापस लाने के लिए है, क्योंकि तब आप ऐसा नहीं कर सकते (प्रोटोटाइप / आदि के लिए चीजें जोड़ें):

app.factory('CarFactory', function() {
    function Car(numCylinder) {
        this.dealer="Bad";
        this.numCylinder = numCylinder
    };
    Car.prototype.breakCylinder = function() {
        this.numCylinder -= 1;
    };
    return Car;
});

देखें कि यह सचमुच कार बनाने वाली फैक्ट्री कैसे है।

उनके ब्लॉग से निष्कर्ष बहुत अच्छा है:

निष्कर्ष के तौर पर,

---------------------------------------------------  
| Provider| Singleton| Instantiable | Configurable|
---------------------------------------------------  
| Factory | Yes      | Yes          | No          |
---------------------------------------------------  
| Service | Yes      | No           | No          |
---------------------------------------------------  
| Provider| Yes      | Yes          | Yes         |       
---------------------------------------------------  
  1. सेवा का उपयोग करें जब आपको बस एक साधारण वस्तु जैसे हैश की आवश्यकता होती है, उदाहरण के लिए {foo; 1; बार: 2} यह कोड करना आसान है, लेकिन आप इसे तुरंत नहीं कर सकते।

  2. जब आपको किसी वस्तु, यानी नए ग्राहक (), नई टिप्पणी (), आदि की आवश्यकता हो तो कारखाने का उपयोग करें।

  3. जब आपको इसे कॉन्फ़िगर करने की आवश्यकता हो तो प्रदाता का उपयोग करें। यानी परीक्षण url, QA url, उत्पादन url।

यदि आप पाते हैं कि आप कारखाने में एक वस्तु वापस कर रहे हैं तो आपको शायद सेवा का उपयोग करना चाहिए।

ऐसा न करें:

app.factory('CarFactory', function() {
    return {
        numCylinder: 4
    };
});

इसके बजाय सेवा का उपयोग करें:

app.service('CarService', function() {
    this.numCylinder = 4;
});

11
यह मेरे लिए बहुत उपयोगी है। तुलना तालिका के लिए +1
वु अनह

5
यदि आप सेवा कार्य को एक पैरामीटर अंक के साथ परिभाषित करते हैं, तो इसमें फैक्टरी विधि के समान लचीलापन होगा
Ovi

जाओ और पोस्ट ब्लॉग पढ़ें, और अपना समय बर्बाद करने की कोशिश कर रहा है कोणीय का पता लगाने की कोशिश करें, यदि आप इस पोस्ट को पढ़ने के बाद जावास्क्रिप्ट जानते हैं तो आप इस के बीच के अंतर को पूरी तरह से समझ पाएंगे।
नूबिका

4
बहुत हैरान ! आप यहां एक ब्लॉग का उल्लेख कर रहे हैं और दोनों पूरी तरह से विपरीत बात कह रहे हैं। आप कहते हैं: फैक्टरी - इंस्टेंटेबल - यस ब्लॉग कहते हैं: फैक्ट्री - इंस्टेंटेबल - नहीं
देवेश एम ०

1
मैं @ देवेश से सहमत हूँ। मुझे लगता है कि आपके पास तात्कालिक मिश्रण है। ब्लॉग पोस्ट से: "केवल फ़ैक्टरी के साथ, आप इसे प्राप्त नहीं कर सकते क्योंकि फ़ैक्टरी को तत्काल नहीं किया जा सकता है"।
मैट

20

इन सभी प्रदाताओं के लिए अवधारणा बहुत सरल है जितना कि यह शुरू में दिखाई देता है। यदि आप एक प्रदाता को अलग करते हैं और विभिन्न भागों को खींचते हैं तो यह बहुत स्पष्ट हो जाता है।

यह बस इन प्रदाताओं में से हर एक में कहें, अन्य की एक विशेष संस्करण है इस क्रम में: provider> factory> value/ constant/ service

इसलिए जब तक प्रदाता ऐसा न कर ले, आप उस प्रदाता को उस श्रृंखला के आगे उपयोग कर सकते हैं जिसके परिणामस्वरूप कम कोड लिखने होंगे। यदि यह पूरा नहीं करता है तो आप क्या चाहते हैं आप श्रृंखला में जा सकते हैं और आपको अधिक कोड लिखना होगा।

यह छवि बताती है कि मेरा क्या मतलब है, इस छवि में आपको एक प्रदाता के लिए कोड दिखाई देगा, जिसमें यह दर्शाया गया है कि आपको यह दर्शाया गया है कि प्रदाता के किन हिस्सों का उपयोग कारखाना, मूल्य आदि बनाने के लिए किया जा सकता है।

AngularJS प्रदाताओं, कारखानों, सेवाओं, आदि सभी एक ही चीज हैं
(स्रोत: Simplygoodcode.com )

ब्लॉग पोस्ट से अधिक जानकारी और उदाहरणों के लिए, जहां मुझे जाने से छवि मिली: http://www.simplygoodcode.com/2015/11/the-difference-between-service-provider-and-factory-in-angularj//


8

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

तो, कारखाने का उपयोग कब करें और सेवा का उपयोग कब करें? यह आपकी कोडिंग वरीयता को उबालता है, और कुछ नहीं। यदि आप मॉड्यूलर जेएस पैटर्न पसंद करते हैं तो कारखाने के लिए जाएं। यदि आपको कंस्ट्रक्टर फ़ंक्शन ("क्लास") शैली पसंद है, तो सेवा के लिए जाएं। ध्यान दें कि दोनों शैलियों निजी सदस्यों का समर्थन करती हैं।

सेवा का लाभ यह हो सकता है कि यह OOP के दृष्टिकोण से अधिक सहज है: एक "वर्ग" बनाएं, और, एक प्रदाता के साथ मिलकर, मॉड्यूल में समान कोड का पुन: उपयोग करें, और बस आपूर्ति करके तात्कालिक वस्तुओं के व्यवहार को भिन्न करें कॉन्फिगर ब्लॉक में कंस्ट्रक्टर के लिए अलग-अलग पैरामीटर।


क्या आप कॉन्फिगरेशन ब्लॉक में कंस्ट्रक्टर को अलग-अलग पैरामीटर प्रदान करके इसका एक उदाहरण दे सकते हैं? अगर यह सिर्फ एक सेवा या कारखाना है तो आप कैसे पैरामीटर प्रदान करते हैं। "आप एक प्रदाता के साथ संयोजन के रूप में" से क्या मतलब है? इसे कॉन्फ़िगर करने में सक्षम होने के कारण मुझे लगता है कि मेरी बहुत सी वस्तुओं को एक प्रदाता बनाम कारखानों या सेवाओं होना चाहिए।
टिम्ब्रोएन

2

ऐसी कोई भी चीज़ नहीं है जिसे फ़ैक्टरी सेवा के साथ तुलना में बेहतर नहीं कर सकती है या नहीं कर सकती है। और इसके विपरीत। फैक्टरी सिर्फ अधिक लोकप्रिय लगती है। इसका कारण निजी / सार्वजनिक सदस्यों को संभालने में इसकी सुविधा है। इस संबंध में सेवा अधिक अनाड़ी होगी। एक सेवा को कोड करते समय आप अपने ऑब्जेक्ट सदस्यों को "इस" कीवर्ड के माध्यम से सार्वजनिक करते हैं और अचानक पता लगा सकते हैं कि वे सार्वजनिक सदस्य निजी तरीकों (यानी आंतरिक कार्यों) के लिए दिखाई नहीं दे रहे हैं।

var Service = function(){

  //public
  this.age = 13;

  //private
  function getAge(){

    return this.age; //private does not see public

  }

  console.log("age: " + getAge());

};

var s = new Service(); //prints 'age: undefined'

कोणीय आप के लिए एक सेवा बनाने के लिए "नए" कीवर्ड का उपयोग करता है, इसलिए उदाहरण के लिए नियंत्रक को कोणीय पास एक ही दोष होगा। बेशक आप इस / उस का उपयोग करके समस्या को दूर कर सकते हैं:

var Service = function(){

  var that = this;

  //public
  this.age = 13;

  //private
  function getAge(){

    return that.age;

  }

  console.log("age: " + getAge());

};

var s = new Service();// prints 'age: 13'  

लेकिन एक बड़ी सेवा के साथ यह \ _-ing कोड को खराब पठनीय बना देगा। इसके अलावा, सेवा के प्रोटोटाइप निजी सदस्यों को नहीं देखेंगे - केवल जनता ही उनके लिए उपलब्ध होगी:

var Service = function(){

  var name = "George";

};

Service.prototype.getName = function(){

  return this.name; //will not see a private member

};

var s = new Service();
console.log("name: " + s.getName());//prints 'name: undefined'

इसे सारांशित करना, फैक्टरी का उपयोग करना अधिक सुविधाजनक है। चूंकि फैक्ट्री में ये कमियां नहीं हैं। मैं इसे डिफ़ॉल्ट रूप से उपयोग करने की सलाह दूंगा।


इस जवाब में कई समस्याएं हैं। सबसे पहले, यह पोस्ट लेक्सिकल स्कूपिंग की जावास्क्रिप्ट की अवधारणा को प्रदर्शित करता है, फिर एंगुलरजेएस सेवाएं कैसे काम करती हैं। दूसरा कॉलिंग myapp.service(...)का संदर्भ पूरी तरह से गायब है। कहाँ है new Service()सेवा समारोह में या ऐसी जगह है जहां सेवा इंजेक्ट किया जाता है पर कहा जा करने की अपेक्षा की। तीसरी सूची बस के संदर्भ में संभव नहीं है myapp.service ('Service', function() {...})
lanoxx

2

यहां तक ​​कि जब वे कहते हैं कि सभी सेवाएं और कारखाने एकल हैं, तो मैं इसके साथ 100 प्रतिशत सहमत नहीं हूं। मैं कहूंगा कि कारखाने एकल नहीं हैं और यह मेरे उत्तर का बिंदु है। मैं वास्तव में उस नाम के बारे में सोचूंगा जो हर घटक (सेवा / फैक्टरी) को परिभाषित करता है, मेरा मतलब है:

एक फैक्ट्री क्योंकि एक सिंगलटन नहीं है, आप जब चाहें इंजेक्शन लगा सकते हैं, क्योंकि यह वस्तुओं के एक कारखाने की तरह काम करता है। आप अपने डोमेन की एक इकाई का एक कारखाना बना सकते हैं और इस ऑब्जेक्ट के साथ अधिक आराम से काम कर सकते हैं जो आपके मॉडल के ऑब्जेक्ट की तरह हो सकता है। जब आप कई ऑब्जेक्ट्स को पुनः प्राप्त करते हैं तो आप उन्हें इस ऑब्जेक्ट्स में मैप कर सकते हैं और यह DDBB और AngularJs मॉडल के बीच एक और लेयर की तरह कार्य कर सकता है। आप ऑब्जेक्ट्स में तरीकों को जोड़ सकते हैं ताकि आप ऑब्जेक्ट्स के लिए उन्मुख हो अपने AngularJs ऐप से थोड़ा अधिक।

इस बीच एक सेवा एक सिंगलटन है, इसलिए हम केवल एक प्रकार का 1 बना सकते हैं, शायद नहीं बना सकते हैं लेकिन हमारे पास केवल 1 उदाहरण है जब हम एक नियंत्रक में इंजेक्ट करते हैं, तो एक सेवा एक आम सेवा (बाकी कॉल, कार्यक्षमता ..) की तरह प्रदान करती है नियंत्रकों के लिए।

वैचारिक रूप से आप सोच सकते हैं जैसे सेवाएं एक सेवा प्रदान करती हैं, कारखाने एक वर्ग के कई उदाहरण (ऑब्जेक्ट) बना सकते हैं


0

सेवाएं

सिंटैक्स : मॉड्यूल. सर्विस ('सेवानाम', फ़ंक्शन); परिणाम : जब सेवानाम को एक इंजेक्शन योग्य तर्क के रूप में घोषित किया जाता है, तो आपको मॉड्यूल. सेवा को दिया गया वास्तविक फ़ंक्शन संदर्भ प्रदान किया जाएगा।

उपयोग : उपयोगिता कार्यों को साझा करने के लिए उपयोगी हो सकता है जो कि इंजेक्शन फ़ंक्शन के संदर्भ में केवल () संलग्न करके उपयोगी हैं। यह भी इंजेक्शन के साथ चलाया जा सकता है। (या) इसी तरह।

कारखाना

सिंटैक्स : मॉड्यूल.फैक्टिंग ('फ़ैक्ट्रीनाम', फंक्शन);

परिणाम : जब फैक्ट्रीनाम को एक इंजेक्टेबल तर्क के रूप में घोषित किया जाता है, तो आपको वह मान प्रदान किया जाएगा, जो मॉड्यूल.फैक्टिंग को दिए गए फ़ंक्शन संदर्भ को लागू करके लौटाया जाता है।

उपयोग : 'क्लास' फ़ंक्शन को वापस करने के लिए उपयोगी हो सकता है जो तब इंस्टेंसेस बनाने के लिए नया हो सकता है।

प्रदाताओं

सिंटेक्स : मॉड्यूल.प्रोवाइडर ('प्रदातानाम', फ़ंक्शन);

परिणाम : जब प्रदाता को एक इंजेक्शन तर्क के रूप में घोषित किया जाता है, तो आपको मॉड्यूल.प्रोवाइडर को दिए गए फ़ंक्शन संदर्भ की $ प्राप्त विधि को लागू करके लौटाया गया मान प्रदान किया जाएगा।

उपयोग : एक 'क्लास' फ़ंक्शन को लौटाने के लिए उपयोगी हो सकता है जो तब इंस्टेंसेस बनाने के लिए नया हो सकता है, लेकिन इसमें इंजेक्शन लगाने से पहले किसी प्रकार के कॉन्फ़िगरेशन की आवश्यकता होती है। शायद उन वर्गों के लिए उपयोगी जो परियोजनाओं में पुन: प्रयोज्य हैं? अभी भी इस पर एक तरह का हौज़।


0

आप जिस तरह से चाहते हैं दोनों का उपयोग कर सकते हैं : चाहे ऑब्जेक्ट या j ust दोनों से कार्यों का उपयोग करने के लिए बनाएं


आप सेवा से नई वस्तु बना सकते हैं

app.service('carservice', function() {
    this.model = function(){
        this.name = Math.random(22222);
        this.price = 1000;
        this.colour = 'green';
        this.manufacturer = 'bmw';
    }
});

.controller('carcontroller', function ($scope,carservice) { 
    $scope = new carservice.model();
})

ध्यान दें :

  • डिफ़ॉल्ट रिटर्न ऑब्जेक्ट द्वारा सेवा और निर्माण कार्य नहीं।
  • तो इसीलिए कंस्ट्रक्टर फंक्शन इस प्रॉपर्टी के लिए सेट है।
  • इस सेवा के कारण वस्तु वापस आ जाएगी, लेकिन लेकिन उस वस्तु के अंदर निर्माण कार्य होगा जो नई वस्तु बनाने के लिए उपयोग किया जाएगा;

आप कारखाने से नई वस्तु बना सकते हैं

app.factory('carfactory', function() {
    var model = function(){
        this.name = Math.random(22222);
        this.price = 1000;
        this.colour = 'green';
        this.manufacturer = 'bmw';
    }
    return model;
});

.controller('carcontroller', function ($scope,carfactory) { 
    $scope = new carfactory();
})

ध्यान दें :

  • डिफ़ॉल्ट रूप से फैक्ट्री फ़ंक्शन द्वारा कारखाना और वस्तु नहीं।
  • इसीलिए कंस्ट्रक्टर फ़ंक्शन के साथ नई ऑब्जेक्ट बनाई जा सकती है।

सरल कार्यों तक पहुँचने के लिए सेवा बनाएँ

app.service('carservice', function () {
   this.createCar = function () {
       console.log('createCar');
   };
   this.deleteCar = function () {
       console.log('deleteCar');
   };
});

.controller('MyService', function ($scope,carservice) { 
    carservice.createCar()
})

सरल कार्यों तक पहुँचने के लिए कारखाना बनाएँ

app.factory('carfactory', function () {
    var obj = {} 
        obj.createCar = function () {
            console.log('createCar');
        };
       obj.deleteCar = function () {
       console.log('deleteCar');
    };
});

.controller('MyService', function ($scope,carfactory) { 
    carfactory.createCar()
})

निष्कर्ष:

  • आप दोनों तरह से उपयोग कर सकते हैं, चाहे आप नई वस्तु बनाएं या साधारण कार्यों तक पहुँचें
  • एक के बाद एक, किसी भी प्रदर्शन को हिट नहीं किया जाएगा
  • दोनों सिंगलटन ऑब्जेक्ट्स हैं और प्रति ऐप केवल एक इंस्टेंस बनाया जाता है।
  • हर जगह केवल एक उदाहरण होने के नाते उनका संदर्भ पारित किया जाता है।
  • कोणीय प्रलेखन में कारखाने को सेवा कहा जाता है और सेवा को सेवा भी कहा जाता है

0

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

प्रदाता फ़ंक्शन मुख्य विधि है और अन्य सभी इस पर सिर्फ वाक्य रचना चीनी हैं। आपको इसकी आवश्यकता तभी है जब आप एक पुन: प्रयोज्य कोड का निर्माण कर रहे हैं जिसे वैश्विक कॉन्फ़िगरेशन की आवश्यकता है।

सेवाओं को बनाने के पांच तरीके हैं: मूल्य, फैक्टरी, सेवा, प्रदाता और लगातार। आप इस बारे में यहां कोणीय सेवा के बारे में अधिक जान सकते हैं , यह लेख व्यावहारिक डेमो उदाहरणों के साथ इन सभी तरीकों की व्याख्या करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.