AngularJS: एक कारखाना क्या है?


101

मैं बहुत से काम कर Angular.jsरहा हूं और कुल मिलाकर मुझे यह एक दिलचस्प और शक्तिशाली ढांचा लगता है।

मुझे पता है कि सेवाओं बनाम कारखानों बनाम प्रदाताओं बनाम मूल्यों पर बहुत सारी चर्चाएं हुई हैं, लेकिन मैं अभी भी बहुत उलझन में हूं कि क्या Factoryहै।

फैक्ट्री को अन्य स्टैकऑवरफ्लो चर्चाओं में निम्नलिखित के रूप में परिभाषित किया गया है:

कारखाना

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

मुझे यह स्पष्टीकरण बहुत मुश्किल लग रहा है और यह मेरी समझ में वृद्धि नहीं करता है कि एक कारखाना क्या है।

चाहेंगे किसी को वास्तव में क्या एक के बारे में कोई स्पष्टीकरण या साझा करने के वास्तविक जीवन उदाहरण है Factoryऔर यही कारण है कि आप एक के एवज में यह प्रयोग करना चाहिए Service, Providerअन्य, या?

अपडेट करें

A किसी वस्तु का service संदर्भ रखता है

A factory एक फ़ंक्शन है जो किसी भी वस्तु को लौटाता है

A provider एक फ़ंक्शन है जो किसी भी फ़ंक्शन को वापस करता है

- भाई -


6
मैं यह नहीं कहूंगा कि यह उस प्रश्न का एक डुप्लिकेट है, बल्कि मैंने उस प्रश्न को पूछने से पहले पढ़ा कि इसका उत्तर Factories(ऊपर उद्धृत) थोड़ा भ्रमित था। नीचे दिए गए कुछ उत्तर कुछ को कम Factoriesकर देते हैं, यहां तक ​​कि मैं समझ भी सकता हूं
कोड व्हिस्परर

1
यह प्रश्न "डुप्लिकेट" की तुलना में अधिक उत्थान करता है, शायद चीजें दूसरे तरीके से होनी चाहिए?
कोड व्हिस्परर

3
यह लिंक इसे अच्छी तरह से समझाता है।
अहमद

जवाबों:


70

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

इस प्रश्न को देखें AngularJS: सेवा बनाम प्रदाता बनाम कारखाना

इसके अलावा इस सार सूक्ष्म अंतर को समझने में सहायक हो सकता है।

स्रोत: https://groups.google.com/forum/# .topic/ angular / hVrkvaHGOfc

jsField: http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/

लेखक: पावेल कोज़लोव्स्की

var myApp = angular.module('myApp', []);

//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
    this.sayHello = function() {
        return "Hello, World!";
    };
});

//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
    return {
        sayHello: function() {
            return "Hello, World!";
        }
    };
});

//provider style, full blown, configurable version     
myApp.provider('helloWorld', function() {
    // In the provider function, you cannot inject any
    // service or factory. This can only be done at the
    // "$get" method.

    this.name = 'Default';

    this.$get = function() {
        var name = this.name;
        return {
            sayHello: function() {
                return "Hello, " + name + "!";
            }
        };
    };

    this.setName = function(name) {
        this.name = name;
    };
});

//hey, we can configure a provider!            
myApp.config(function(helloWorldProvider){
    helloWorldProvider.setName('World');
});


function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {

    $scope.hellos = [
        helloWorld.sayHello(),
        helloWorldFromFactory.sayHello(),
        helloWorldFromService.sayHello()];
}​

तो उन्हें देखने का एक तरीका यह है कि Provider > Factory > Service > Valueक्या जटिलता के क्रम में वे जाते हैं ?
कोड व्हिस्परर

2
इसे देखने का एक तरीका है, दूसरा फैक्ट्री और सर्विस को प्रदाता के सार के रूप में सोचना होगा। अगर कोई गलत है तो कोई मुझे सही करेगा लेकिन हुड के नीचे फैक्टरी और सेवा प्रदाता। यही कारण है कि प्रदान करने के लिए "धातु से निकटतम" संस्करण है। मेरा मानना ​​है कि मूल्य स्थिरांक को परिभाषित करने का एक तरीका है जिसका उपयोग व्यापक रूप से किया जा सकता है।
जोनाथन पालुम्बो

18

एक बड़ा अंतर मुझे लगता है कि आप कारखाने में कस्टम कोड चला सकते हैं। लेकिन, एक सेवा में, केवल वस्तु निर्माण होता है।

myJs.factory('Factory', function() {

    //Write custom code here

    return {
            Hello: function() {
            return "Hello, World!"
        }
    };
});

1
आप किसी सेवा निर्माता फ़ंक्शन में कस्टम कोड भी चला सकते हैं, नहीं? कोई भी एक निर्माता समारोह के अंदर कहा, आप अन्य कोड नहीं चला सकते हैं
nonopolarity

9

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

  • सेवा और कारखाने अलग-अलग तरीकों से एक ही काम करते हैं
  • दोनों सुई लगाने वाले हैं
  • ज्यादातर चीजों के लिए फैक्ट्री सिंटैक्स का इस्तेमाल होता है
  • समझने में आसान है
  • आजकल es6 "सेवा" के साथ किया जाता है क्योंकि यह es6 वर्गों में बेहतर रूप से परिवर्तित होता है
  • इसके अनिवार्य रूप से नियंत्रक से दूर व्यापार तर्क है
  • यदि आप नियंत्रकों के साथ बिज़ लॉजिक का उपयोग करते हैं तो आप केवल नियंत्रकों के साथ उपयोग कर सकते हैं
  • कंट्रोलर लम्बे बिज़ लॉजिक को प्रोसेस नहीं करने की गुंजाइश पर डेटा डालने के लिए है
  • तो ऊपर के परिदृश्य में ऐसा होता है कि जटिल द्विज तर्क को नियंत्रकों में बांधा जाता है। डाटा प्रोसेसिंग के लिए नहीं। तो बिट्स और उसके टुकड़ों को सेवाओं या कारखाने में डाल दें। तो आपका कोड दुबला और मॉड्यूलर है।
  • सेवाएं एकल हैं

0

सेवाएँ ज्यादातर ऑब्जेक्ट हैं जिसमें आप ऑब्जेक्ट के कंस्ट्रक्टर वर्ग का वर्णन करते हैं। फ्रेमवर्क के भीतर कहीं गहरी, Object.create () फ़ंक्शन को कहा जाता है और फिर आप किसी नियंत्रक का उपयोग करके उसकी वस्तु और विधियों को कॉल करके किसी सेवा का उपयोग कर सकते हैं। दूसरी ओर, फ़ैक्ट्री डिफ़ॉल्ट रूप से ऑब्जेक्ट नहीं बनाती है और इसलिए आपको सभी विशेषताओं और विधियों को परिभाषित करने के बाद संपूर्ण ऑब्जेक्ट स्थान को वापस करने की आवश्यकता होती है।

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