অ্যাঙ্গুলারজেএস: কারখানা কী?


101

আমি প্রচুর কাজ করছি Angular.jsএবং সামগ্রিকভাবে আমি এটি একটি আকর্ষণীয় এবং শক্তিশালী কাঠামো বলে মনে করি।

আমি জানি পরিষেবাদি বনাম কারখানাগুলি সম্পর্কিত সরবরাহকারী বনাম মানগুলি নিয়ে প্রচুর আলোচনা হয়েছে তবে Factoryএটি কী তা সম্পর্কে আমি এখনও বেশ বিভ্রান্ত ।

কারখানাটি অন্যান্য স্ট্যাকওভারফ্লো আলোচনায় নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়েছে:

কারখানা

সিনট্যাক্স: module.factory( 'factoryName', function );ফলাফল: ফ্যাক্টরিনামকে ইনজেক্টেবল আর্গুমেন্ট হিসাবে ঘোষণা করার সময় আপনাকে মডিউল.ফ্যাক্টরিতে ফাংশন রেফারেন্সের সাহায্যে ফিরে আসা মানটি সরবরাহ করা হবে।

আমি এই ব্যাখ্যাটি উপলব্ধি করা খুব কঠিন বলে মনে করি এবং এটি একটি কারখানা কী তা আমার বোঝার বৃদ্ধি করে না।

ঠিক কী Factoryকী এবং আপনার পরিবর্তে এটি কেন ব্যবহার করা উচিত সে সম্পর্কে শেয়ার করার জন্য কারও কাছে কোনও ব্যাখ্যা বা বাস্তব জীবনের উদাহরণ থাকতে পারে Service,Provider অন্যান্য, বা?

হালনাগাদ

এ যে কোনও বস্তুর service রেফারেন্স ধারণ করে

factory হ'ল এমন একটি ফাংশন যা কোনও বস্তুকে প্রত্যাবর্তন করে

provider একটি ফাংশন যা কোনও ফাংশন প্রদান করে returns

- ভাই -


6
আমি এটি বলতে চাই না যে এটি সেই প্রশ্নের সদৃশ, বরং আমি এই প্রশ্নটি জিজ্ঞাসা করার আগে এই প্রশ্নটি পড়ার আগে Factories(উপরে উদ্ধৃত) কিছুটা বিভ্রান্তিকর ছিল। নীচের কিছু উত্তর Factoriesএমন কিছুতে হ্রাস
কোড হুইস্পেরার

1
এই প্রশ্নটির "ডুপ্লিকেট" এর চেয়ে আরও বেশি কিছু রয়েছে, সম্ভবত জিনিসগুলি অন্যভাবে হওয়া উচিত?
কোড হুইস্পেরার

3
এই লিঙ্কটি এটি ভালভাবে ব্যাখ্যা করে।
আহমেদ

উত্তর:


70

আমি যা বুঝতে পেরেছি সেগুলি থেকে তারা সমস্ত প্রায় একই। প্রধান পার্থক্য তাদের জটিলতা হয়। সরবরাহকারীরা রানটাইম সময়ে কনফিগারযোগ্য, কারখানাগুলি আরও কিছুটা শক্তিশালী এবং পরিষেবাগুলি সহজতম রূপ।

এই প্রশ্নটি দেখুন AngularJS: পরিষেবা বনাম সরবরাহকারী বনাম কারখানা

এছাড়াও এই সারকথা সূক্ষ্ম পার্থক্য বুঝতে সহায়ক হতে পারে।

সূত্র: https://groups.google.com/forum/#!topic/angular/hVrkvaHGOfc

জেএসফিডাল: 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
আপনি কোনও পরিষেবা নির্মাণকারীর কার্যক্রমেও কাস্টম কোড চালাতে পারেন, তাই না? কোনও কনস্ট্রাক্টর ফাংশনের অভ্যন্তরে কেউ বলেনি, আপনি অন্য কোডটি চালাতে পারবেন না
অবিচ্ছিন্নতা

9

এই বিষয়টিতে আমার দুটি সেন্ট। আমি খুব খুব নবাগত এবং কেবল কৌনিক জেএসকে বুঝতে পেরেছিলাম এবং এটি এমন একটি বিষয় যা আমাকে অনেক গুলিয়ে ফেলেছিল এবং তাই আমি এটিকে কিছুটা বিশদভাবে অধ্যয়ন করেছি। আমি সাক্ষাত্কার দেওয়ার জন্য নোট তৈরি করছি এবং এটি অন্যের পক্ষে কার্যকর হতে পারে।

  • পরিষেবা এবং কারখানা একই জিনিস বিভিন্ন উপায়ে করে
  • উভয়ই সংক্রামক
  • বেশিরভাগ জিনিসের জন্য কারখানার সিনট্যাক্স ব্যবহার করা হয়
  • বুঝতে সহজ
  • আজকাল es6 এর সাথে "পরিষেবা" করা হয়, যেহেতু এটি আরও ভাল এস 6 শ্রেণিতে রূপান্তরিত হয়
  • এটি নিয়ামক থেকে ব্যবসায়িক যুক্তি দূরে সরিয়ে দেয়
  • আপনি যদি নিয়ামকদের সাথে বিজ লজিক ব্যবহার করেন তবে আপনি কেবল নিয়ন্ত্রণকারীদের সাথেই ব্যবহার করতে পারেন
  • নিয়ামক হ'ল দৈর্ঘ্য বিজ যুক্তি প্রক্রিয়াকরণ না করে স্কোপে ডেটা রাখার জন্য
  • সুতরাং উপরের দৃশ্যে যা ঘটে তা হ'ল জটিল বিজ যুক্তিটি নিয়ন্ত্রণকারীদের সাথে আবদ্ধ। ডেটা প্রক্রিয়াজাতকরণের জন্য নয়। সুতরাং এর বিট এবং টুকরা পরিষেবা বা কারখানায় রাখুন। সুতরাং আপনার কোড হাতা এবং মডুলার।
  • পরিষেবাদি একক হয়

0

পরিষেবাদিগুলি বেশিরভাগ অবজেক্টস যেখানে আপনি অবজেক্টের কনস্ট্রাক্টর ক্লাসটি বর্ণনা করেন। কাঠামোর ভিতরে কোথাও গভীর, অবজেক্ট.ক্রিয়েট () ফাংশনটি কল করা হয় এবং তারপরে আপনি কোনও নিয়ন্ত্রণক ব্যবহার করে এর অবজেক্ট এবং পদ্ধতিগুলিকে কল করে কোনও পরিষেবা ব্যবহার করতে পারেন। অন্যদিকে কারখানাটি ডিফল্টরূপে কোনও বস্তু তৈরি করে না এবং তাই সমস্ত বৈশিষ্ট্য এবং পদ্ধতিগুলি সংজ্ঞায়িত করার পরে আপনাকে পুরো অবজেক্টের অবস্থানটি ফিরিয়ে আনতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.