কৌণিক জেএস: কারখানার পরিবর্তে পরিষেবা কখন ব্যবহার করবেন


296

আমাকে এখানে সহ্য করুন। আমি জানি যে এর মতো আরও উত্তর রয়েছে: AngularJS: পরিষেবা বনাম সরবরাহকারী বনাম কারখানা

তবে আপনি কখন কারখানার পরিষেবা ব্যবহার করবেন তা আমি এখনও বুঝতে পারি না।

আমি কারখানাকে যা বলতে পারি তা থেকে সাধারণভাবে "সাধারণ" ফাংশন তৈরি করতে ব্যবহৃত হয় যা একাধিক কন্ট্রোলার দ্বারা ডাকা যেতে পারে: সাধারণ নিয়ামক ক্রিয়াকলাপ তৈরি করা

কৌণিক দস্তাবেজগুলি পরিষেবার চেয়ে কারখানাকে বেশি পছন্দ করে। এমনকি তারা "পরিষেবা" উল্লেখ করে যখন তারা কারখানাটি ব্যবহার করে যা আরও বিভ্রান্তিকর! 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()
    ];
}

অবশ্যই পরিষেবাটি ব্যক্তিগতকে সমর্থন করে তবে আপনি যদি আমার পোস্টটি সঠিকভাবে পড়েন তবে এটি বিশুদ্ধভাবে কোড শৈলী: "প্রাইভেট" ভেরিয়েবলগুলি অনুকরণ করার জন্য আমরা একটি নতুন লেজিকাল স্কোপের সুবিধাও নিতে পারি। এটি "সিমুলেট"
টমাস পন্স

আমি এই আলোচনাটি খুব দরকারী স্ট্যাকওভারফ্লো.com
আনন্দ গুপ্ত

উত্তর:


280

ব্যাখ্যা

আপনি এখানে বিভিন্ন জিনিস পেয়েছেন:

প্রথম:

  • আপনি যদি কোনও পরিষেবা ব্যবহার করেন তবে আপনি কোনও ফাংশন ( thisকীওয়ার্ড) এর উদাহরণ পাবেন ।
  • আপনি যদি কারখানাটি ব্যবহার করেন তবে ফাংশন রেফারেন্স (কারখানায় রিটার্ন স্টেটমেন্ট) দিয়ে অনুরোধ করে ফিরে আসা মানটি পাবেন ।

রেফ: Angular.service বনাম কৌণিক.ফ্যাক্টরী

দ্বিতীয়ত:

মাথায় রাখুন AngularJS- এ সমস্ত সরবরাহকারী (মান, ধ্রুবক, পরিষেবাগুলি, কারখানাগুলি) সিঙ্গেলন!

তৃতীয়:

এক বা অন্য (পরিষেবা বা কারখানা) ব্যবহার করা কোড শৈলীর বিষয়ে। তবে, AngularJS এর সাধারণ উপায় হ'ল কারখানাটি ব্যবহার করা ।

কেন?

কারণ "কারখানার পদ্ধতিটি অ্যাংুলারজেএস নির্ভরতা ইনজেকশন সিস্টেমে জিনিসগুলি পাওয়ার সর্বাধিক সাধারণ উপায় It এটি অত্যন্ত নমনীয় এবং পরিশীলিত সৃষ্টির যুক্তি ধারণ করতে পারে factories "ভেরিয়েবলস very এটি খুব কার্যকর কারণ আমরা প্রদত্ত পরিষেবাদির প্রয়োগের বিবরণটি গোপন করতে পারি" "

( রেফ : http://www.amazon.com/Masting-Web- প্রয়োগ - ডেভেলপমেন্ট- 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

"আপনি যদি চান আপনার ফাংশনটিকে একটি সাধারণ ফাংশনের মতো ডাকা হয় , কারখানাটি ব্যবহার করুন you আপনি যদি চান আপনার ফাংশনটি নতুন অপারেটরের সাথে ইনস্ট্যান্ট করা হোক, পরিষেবাটি ব্যবহার করুন you আপনি যদি পার্থক্য না জানেন তবে কারখানাটি ব্যবহার করুন" "


হালনাগাদ :

অ্যাঙ্গুলারজেএস টিম তার কাজ করে এবং একটি ব্যাখ্যা দেয়: http://docs.angularjs.org/guide/providers

এবং এই পৃষ্ঠা থেকে:

"ফ্যাক্টরি এবং পরিষেবা সর্বাধিক ব্যবহৃত রেসিপি। তাদের মধ্যে পার্থক্যটি হ'ল পরিষেবা রেসিপিটি কাস্টম ধরণের জিনিসগুলির জন্য আরও ভাল কাজ করে, যখন কারখানা জাভাস্ক্রিপ্টের আদিম এবং কার্যাদি তৈরি করতে পারে।"


7
প্রথম প্রথম: আমি এটি সর্বত্রই পড়েছি কিন্তু এর ব্যবহারিক প্রভাব আমি বুঝতে পারি না। আপনার উত্তর থেকে অনুমান করি "বেশিরভাগ অংশের জন্য" কোনও ব্যবহারিক পার্থক্য নেই? বই রেফের জন্য ধন্যবাদ যদিও!
ব্যবহারকারী 1941747

এটি সহজ যদি আপনার পরিষেবাটি সত্যিই জটিল হয় এবং আপনার ব্যক্তিগত পদ্ধতি এবং জিনিসগুলির একটি কারখানা ব্যবহার করা দরকার
টমাস পন্স

1
আমি লক্ষ্য করেছি আপনি যুক্ত করেছেন "আপনি যদি কোনও পরিষেবার উদাহরণটি ফিরে আসতে চান তবে কেবল পরিষেবাটি ব্যবহার করুন"। আমার ফলোআপ প্রশ্নটি হবে আপনি কখন কোনও পরিষেবার উদাহরণ ফিরিয়ে দিতে চান? আমি এখানে একটি নির্দিষ্ট ব্যবহারের কেস সন্ধান করার চেষ্টা করছি।
ব্যবহারকারী 1941747

12
"যেহেতু কারখানাগুলি নিয়মিত কাজ করে তাই আমরা" ব্যক্তিগত "ভেরিয়েবলগুলি অনুকরণ করার জন্য একটি নতুন লেজিকাল স্কোপের সুবিধাও নিতে পারি।" - এটি কারখানার সাথে সুনির্দিষ্ট নয়, আপনি পরিষেবার সাথে একই কাজ করতে পারেন ..
pootzko

দেখে মনে হচ্ছে গুগল টিম কারখানার চেয়ে বেশি পরিষেবা পছন্দ করে, এটি জিনিসগুলিকে আরও বিভ্রান্ত করে তোলে! google-styleguide.googlecode.com/svn/trunk/…
xzhang

111

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

সরাসরি তাঁর ব্লগ থেকে:

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;
    }      
});

এটি দেখায় যে কীভাবে কার সার্ভিসেস সর্বদা 4 সিলিন্ডারযুক্ত একটি গাড়ি তৈরি করবে, আপনি পৃথক গাড়ির জন্য এটি পরিবর্তন করতে পারবেন না। যেখানে কারফ্যাক্টরি একটি ফাংশন দেয় যাতে আপনি এটি করতে পারেনnew CarFactory নিজের নিয়ামকটিতে সেই গাড়ীটি নির্দিষ্ট করে সিলিন্ডারের বেশ কয়েকটি পাস করে । আপনি পারবেন না new 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 code এটি কোড করা সহজ তবে আপনি এটি ইনস্ট্যান্ট করতে পারবেন না।

  2. ফ্যাক্টরিটি ব্যবহার করুন যখন আপনাকে কোনও বস্তুর তাত্ক্ষণিক প্রয়োজন হয়, অর্থাত নতুন গ্রাহক (), নতুন মন্তব্য () ইত্যাদি inst

  3. আপনার যখন এটি কনফিগার করতে হবে তখন সরবরাহকারী ব্যবহার করুন। অর্থাত্ পরীক্ষার ইউআরএল, কিউএ ইউআরএল, উত্পাদন ইউআরএল।

আপনি যদি দেখতে পান যে আপনি কেবল কোনও কারখানায় কোনও জিনিস ফিরিয়ে দিচ্ছেন আপনার সম্ভবত পরিষেবাটি ব্যবহার করা উচিত।

এটি করবেন না:

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

পরিবর্তে পরিষেবাটি ব্যবহার করুন:

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

11
এটা আমার জন্য খুব সহায়ক তুলনা সারণির জন্য +1
ভু আনহ

5
আপনি যদি কোনও প্যারামিটার নামক সিলিন্ডারের সাহায্যে পরিষেবা ফাংশনটি সংজ্ঞায়িত করেন তবে এতে কারখানার পদ্ধতির মতোই নমনীয়তা থাকবে
ওভি

যান এবং পোস্ট ব্লগটি পড়ুন, এবং কৌনিকটি বের করার চেষ্টা করে আপনার সময় নষ্ট করবেন, আপনি যদি এই পোস্টটি পড়ার পরে জাভাস্ক্রিপ্ট জানেন তবে আপনি পুরোপুরি এইটির মধ্যে পার্থক্য বুঝতে পারবেন।
ncubica

4
খুব বিস্মিত ! আপনি এখানে একটি ব্লগ উল্লেখ করছেন এবং উভয়ই সম্পূর্ণ বিপরীত জিনিস বলছেন। আপনি বলেছেন: কারখানা - তাত্ক্ষণিক - হ্যাঁ ব্লগ বলেছেন: কারখানা - ইনস্ট্যানটেবল - না
দেवेश এম

1
আমি @ দেবেশের সাথে একমত আমি মনে করি আপনার সাথে ইনস্ট্যান্টিয়েটগুলি মিশে গেছে। ব্লগ পোস্ট থেকে: "শুধুমাত্র কারখানার সাথে, আপনি এটি অর্জন করতে পারবেন না কারণ কারখানাটি তাত্ক্ষণিকভাবে চালু করা যায় না"।
ম্যাট

20

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

এটা শুধু এই সরবরাহকারীদের প্রতিটি করা, অন্যান্য একটি বিশেষ সংস্করণ এই অনুক্রমে: provider> factory> value/ constant/ service

এত দিন সরবরাহকারী আপনি যা করতে পারেন তেমন করে যা আপনি আরও শৃঙ্খলে নীচে কোড লেখার ফলস্বরূপ সরবরাহকারীর ব্যবহার করতে পারেন। এটি যদি আপনি যা চান তা পূরণ না করে আপনি চেইনটিতে যেতে পারেন এবং আপনাকে আরও কোড লিখতে হবে।

এই চিত্রটি আমার অর্থ কি তা বোঝায়, এই চিত্রটিতে আপনি সরবরাহকারীর কোড দেখতে পাবেন, অংশগুলি হাইলাইট করে দেখিয়েছে যে সরবরাহকারীর কোন অংশটি পরিবর্তে কারখানা, মান ইত্যাদি তৈরি করতে ব্যবহৃত হতে পারে।

অ্যাঙ্গুলারজেএস সরবরাহকারী, কারখানা, পরিষেবা ইত্যাদি সমস্ত একই জিনিস
(উত্স: সরলগুডকোড.কম )

আরো বিস্তারিত জানার এবং ব্লগ পোস্টের থেকে উদাহরণ যেখানে আমি যেতে থেকে ছবিতে পেয়েছিলাম জন্য: http://www.simplygoodcode.com/2015/11/the-difference-between-service-provider-and-factory-in-angularjs/


8

কারখানা এবং পরিষেবা উভয়ই সিঙ্গেলটন অবজেক্টগুলিতে ফল দেয় যা সরবরাহকারীরা কনফিগার করতে সক্ষম হন এবং নিয়ামকগুলিতে এবং ইনরেকশনগুলিতে চালিত হন। ইনজেকটিস্টের দৃষ্টিকোণ থেকে, বিষয়টি কোনও কারখানা বা পরিষেবা থেকে এসেছে কিনা একেবারেই কোনও পার্থক্য নেই।

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

পরিষেবার সুবিধাটি হতে পারে যে এটি ওওপি দৃষ্টিকোণ থেকে আরও স্বজ্ঞাত: একটি "শ্রেণি" তৈরি করুন এবং কোনও সরবরাহকারীর সাথে মিলিয়ে মডিউলগুলিতে একই কোডটি পুনরায় ব্যবহার করুন এবং কেবল সরবরাহের মাধ্যমে ইনস্ট্যান্টেটেড অবজেক্টগুলির আচরণের পরিবর্তিত হতে পারেন কনফিগার ব্লকে কনস্ট্রাক্টরের বিভিন্ন পরামিতি।


কনফিগার ব্লকে কনস্ট্রাক্টরকে বিভিন্ন পরামিতি সরবরাহ করে আপনি কী বোঝাতে চেয়েছেন তার একটি উদাহরণ দিতে পারেন? এটি যদি কেবল কোনও পরিষেবা বা কারখানা হয় তবে আপনি কীভাবে প্যারামিটারগুলি সরবরাহ করবেন। "সরবরাহকারীর সাথে একত্রে" বলতে কী বোঝ? এটি কনফিগার করতে সক্ষম হওয়ায় আমার মনে হয় যে আমার প্রচুর অবজেক্টগুলি বনাম কারখানা বা পরিষেবা সরবরাহকারী হওয়া উচিত।
টিম্বব্রাউন

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'  

তবে একটি বৃহত পরিষেবা ধ্রুবক সহ - এই-ইনিং কোডটি খারাপভাবে পঠনযোগ্য করে তুলবে। তদুপরি, পরিষেবা প্রোটোটাইপগুলি ব্যক্তিগত সদস্যদের দেখতে পাবে না - কেবল সর্বজনীন তাদের জন্য উপলব্ধ হবে:

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() {...})
ল্যানক্সিক্স

2

এমনকি যখন তারা বলে যে সমস্ত পরিষেবা এবং কারখানাগুলি সিঙ্গলটন, তখন আমি এর সাথে শতভাগ সম্মত হই না। আমি বলব যে কারখানাগুলি সিঙ্গেলন নয় এবং এটি আমার উত্তরের বিষয়। আমি সেই নামটি সম্পর্কে সত্যিই ভাবব যা প্রতিটি উপাদানকে (পরিষেবা / কারখানা) সংজ্ঞায়িত করে, আমি বলতে চাই:

একটি কারখানা কারণ একটি সিঙ্গলটন নয়, আপনি ইনজেক্ট করার সময় আপনি যতগুলি চান তা তৈরি করতে পারেন, সুতরাং এটি অবজেক্টগুলির একটি কারখানার মতো কাজ করে। আপনি আপনার ডোমেনের সত্তার একটি কারখানা তৈরি করতে পারেন এবং এই জিনিসগুলির সাথে আরও স্বাচ্ছন্দ্যে কাজ করতে পারেন যা আপনার মডেলের কোনও অবজেক্টের মতো হতে পারে। যখন আপনি বেশ কয়েকটি বস্তু পুনরুদ্ধার করেন আপনি এগুলিতে এইগুলিকে মানচিত্র করতে পারেন এবং এটি ডিডিবিবি এবং অ্যাঙ্গুলারজেস মডেলের মধ্যে অন্য ধরনের স্তর তৈরি করতে পারে You

ইতিমধ্যে পরিষেবাটি একটি সিঙ্গলটন, সুতরাং আমরা কেবল 1 ধরণের 1 তৈরি করতে পারি, সম্ভবত তৈরি করতে পারি না তবে আমরা যখন নিয়ামককে ইনজেকশন করি তখন আমাদের কেবল 1 টি উদাহরণ থাকে, সুতরাং পরিষেবাটি একটি সাধারণ পরিষেবা (রেস্ট কল, কার্যকারিতা ..) এর মতো আরও বেশি সরবরাহ করে) নিয়ন্ত্রকদের কাছে।

ধারণাগতভাবে আপনি ভাবতে পারেন যে পরিষেবাগুলি পরিষেবা সরবরাহ করে, কারখানাগুলি কোনও শ্রেণীর একাধিক উদাহরণ (অবজেক্ট) তৈরি করতে পারে


0

সেবা

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

ব্যবহার : কেবলমাত্র ইনজেকশনের ফাংশন রেফারেন্সে () সংযোজন করে অনুরোধ করতে দরকারী এমন ইউটিলিটি ফাংশনগুলি ভাগ করে নেওয়ার জন্য দরকারী হতে পারে। ইনজেক্টেডআর্গ.কল (এটি) বা অনুরূপ দিয়েও চালানো যেতে পারে।

কারখানা

সিনট্যাক্স : মডিউল.ফ্যাক্টরি ('কারখানার নাম', ফাংশন);

ফলাফল : ফ্যাক্টরিনামকে ইনজেকশনযোগ্য আর্গুমেন্ট হিসাবে ঘোষণার সময় আপনাকে মডিউল.ফ্যাক্টরিতে ফাংশন রেফারেন্স দিয়ে অনুরোধ করে ফেরত দেওয়া মান সরবরাহ করা হবে।

ব্যবহার : উদাহরণস্বরূপ তৈরি করতে নতুন করা যেতে পারে এমন কোনও 'শ্রেণি' ফাংশন ফেরত দেওয়ার জন্য দরকারী হতে পারে।

প্রোভাইডার

সিনট্যাক্স : মডিউল.প্রভাইডার ('প্রোভাইডারনেম', ফাংশন);

ফলাফল : যখন প্রদত্ত নামকে ইনজেক্টেবল আর্গুমেন্ট হিসাবে ঘোষণার সময় আপনাকে মডিউল.প্রোভাইডারে পাস করা ফাংশন রেফারেন্সের পদ্ধতিটি গ্রহণ করে অনুরোধ করে ফেরত দেওয়া মান সরবরাহ করা হবে।

ব্যবহার : কোনও 'শ্রেণি' ফাংশন ফিরিয়ে দেওয়ার জন্য দরকারী হতে পারে যা উদাহরণ তৈরি করতে নতুন করা যেতে পারে তবে এর জন্য ইনজেকশনের আগে কিছুটা কনফিগারেশন প্রয়োজন। প্রকল্পগুলিতে পুনরায় ব্যবহারযোগ্য ক্লাসগুলির জন্য সম্ভবত দরকারী? এখনও এই এক ধরণের ধূসর।


0

আপনি যেভাবে চান উভয়টিই ব্যবহার করতে পারেন : উভয় থেকে ফাংশন অ্যাক্সেস করতে অবজেক্ট তৈরি করুন বা জ 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

কারখানা এবং পরিষেবা সর্বাধিক ব্যবহৃত পদ্ধতি। তাদের মধ্যে একমাত্র পার্থক্য হ'ল সার্ভিস পদ্ধতি হ'ল উত্তরাধিকারের স্তরক্রমের প্রয়োজন এমন বস্তুর জন্য আরও ভাল কাজ করে, যখন কারখানাটি জাভাস্ক্রিপ্টের আদিম এবং কার্যাদি তৈরি করতে পারে।

সরবরাহকারী ফাংশন হ'ল মূল পদ্ধতি এবং অন্যান্য সমস্তগুলি কেবলমাত্র সিনট্যাকটিক চিনির উপর রয়েছে। আপনি কেবল তখনই প্রয়োজন যখন আপনি বিশ্বব্যাপী কনফিগারেশন প্রয়োজন এমন কোডের পুনরায় ব্যবহারযোগ্য টুকরাটি তৈরি করছেন।

পরিষেবা তৈরির জন্য পাঁচটি পদ্ধতি রয়েছে: মান, কারখানা, পরিষেবা, সরবরাহকারী এবং ধ্রুবক। আপনি এখানে কৌনিক পরিষেবা সম্পর্কে আরও শিখতে পারেন , এই নিবন্ধটি ব্যবহারিক ডেমো উদাহরণ সহ এই সমস্ত পদ্ধতি ব্যাখ্যা করে।

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