নতুনদের জন্য, কেউ কি AngularJS এ পরিষেবা, কারখানা এবং সরবরাহকারীর মধ্যে পার্থক্য পরিষ্কারভাবে ব্যাখ্যা করতে পারে?


উত্তর 1:

AngularJS: পরিষেবা বনাম সরবরাহকারী বনাম কারখানার মধ্যে পার্থক্য

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

আপনি যদি মনে করেন সেগুলি একই রকম - আপনি ঠিক বলেছেন। তারা খুব অনুরূপ। আসলে, তারা সব একই জিনিস।

তারা সবাই সরবরাহকারী। কারখানা এবং পরিষেবা কেবল সরবরাহকারীর বিশেষ বিষয়, তবে আপনি কেবল সরবরাহকারী ব্যবহার করে যা কিছু করতে চান তা অর্জন করতে পারেন। আমি তোমাকে দেখাব.

প্রদানকারী

আমরা এমন একটি সরবরাহকারী তৈরি করতে যাচ্ছি যা কোনও মান দেয় এবং কেবল সেই মানটি প্রদর্শন করে, আপনি এটি করবেন:

var mod = কৌণিক.মডিউল ("মাইমোডুল", []); mod.provider ("আমারপ্রভাইডার", ফাংশন () {এটি $ get = ফাংশন () "" আমার মান "ফেরান;;;}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার);}); কনসোল আউটপুট মাইকন্ট্রোলার - মাইপ্রোভাইডার: আমার মান

একটি কার্যকারী ইন্টারেক্টিভ উদাহরণ পাওয়া যাবে: জেএস ফিডল।

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

আরও কোড নমুনায় নোট করুন আমি বাদ দিতে চলেছি কোড অংশের সংক্ষিপ্ত এবং বিন্দু রাখার উদ্দেশ্যে ট্যাগ এবং মোডের সংজ্ঞা।

কৌণিক শুধুমাত্র একবার - একবার মান পাবে

নোট করুন যে কৌণিক কেবল একবার "মান" দেয়, সরবরাহকারীর যতবার ইনজেকশন দেওয়া যায় না। এর অর্থ এটি একবারে $ গেট () একবারে কল করে, provided গেট () সরবরাহকৃত মান সঞ্চয় করে এবং প্রতিবার আপনাকে সেই একই সঞ্চিত মান দেয়।

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

mod.provider ("আমারপ্রভাইডার", ফাংশন () {এটি। $ get = ফাংশন () so কনসোল.লগ ("মাইপ্রোভাইডার ফাংশন। $ পেতে () বলা হয়।"); // এই লাইনটি "আমার মান" যোগ করুন;}; }); মোডকন্ট্রোলার ("মাইকন্ট্রোলার", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার);}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার 2", ফাংশন (মাইপ্রোভাইডার) {// এই কন্ট্রোলার কনসোল.লগ যুক্ত করুন ("মাইকন্ট্রোলার 2 - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার);}); কনসোল আউটপুট মাইপ্রোভাইডার ফাংশন। $ পেয়ে () কল করা হয়। মাইকন্ট্রোলার - মাইপ্রোভাইডার: আমার মান মাইকন্ট্রোলার 2 - মাইপ্রোভাইডার: আমার মান

জেএস ফিডল খুলুন

আপনি দেখতে পাচ্ছেন $ get () ফাংশনটি কেবল একবার কল করা হয়েছিল।

নোট করুন যে আমরা সরবরাহকারীর জন্য $ get () নামক একটি পদ্ধতি তৈরি করার উদ্দেশ্যে কেবল একটি গুচ্ছ কোড লিখেছি। কেন কৌনিকটি অন্য ফাংশন সংজ্ঞায়িত করে এমন ফাংশন দেওয়ার পরিবর্তে, কেন কেবল তার পরিবর্তে আমরা সরাসরি সঞ্চালন করতে চাই না এমন ফাংশনটি দিই না? আচ্ছা আপনি পারেন, এটিকেই কৌণিক একটি ফ্যাক্টরি বলে।

একটি কারখানা

কারখানার সাহায্যে আপনি just get পদ্ধতিটির জন্য কেবলমাত্র ফাংশন বডি সরবরাহ করেন এবং বাকীটি কৌণিকর হয়ে যায়। নীচে নতুন কোডটি দেখতে কেমন, আপনি দেখতে পাবেন যে এটি ঠিক একইরকম আচরণ করে।

মোড.ফ্যাক্টরি ("মাইপ্রোভাইডার", ফাংশন () {// পরিবর্তিত "সরবরাহকারী" থেকে "কারখানা" কনসোল.লগ ("ফ্যাক্টরি ফাংশন ডাকা।"); ফিরে "আমার মান";}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার);}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার 2", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার 2 - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার);}); কনসোল আউটপুট কারখানার ফাংশন ডাকা হয়। মাইকন্ট্রোলার - মাইপ্রোভাইডার: আমার মান মাইকন্ট্রোলার 2 - মাইপ্রোভাইডার: আমার মান

জেএস ফিডল খুলুন

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

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

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

ফাংশন মাইওবজেক্ট () {// আমাদের অবজেক্ট কনস্ট্রাক্টর এটি যুক্ত করুন getgetValue = ফাংশন () "" আমার মান "ফেরান; }; । মোড.ফ্যাক্টরি ("মাইপ্রোভাইডার", ফাংশন () {কনসোল.লগ ("ফ্যাক্টরি ফাংশন বলে।"); নতুন মাইবজেক্ট (); // আমাদের বস্তুর উদাহরণ তৈরি করুন}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার.সেটভ্যালু ()); // getValue () call) কল করতে পরিবর্তন হয়েছে; মোডকন্ট্রোলার ("মাইকন্ট্রোলার 2", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার 2 - মাইপ্রোভাইডার:" + মাইপ্রোভিডার.সেটভ্যালু ()); // getValue () call) কল করতে পরিবর্তন হয়েছে; কনসোল আউটপুট কারখানার ফাংশন ডাকা হয়। মাইকন্ট্রোলার - মাইপ্রোভাইডার: আমার মান মাইকন্ট্রোলার 2 - মাইপ্রোভাইডার: আমার মান

জেএস ফিডল খুলুন

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

এটি একটি খুব ছোট টুইট। এটার পরিবর্তে:

ফাংশন মাইওবজেক্ট () {this.getValue = ফাংশন () "" আমার মান "ফেরত দেয়; }; } মোড.ফ্যাক্টরি ("মাইপ্রোভাইডার", ফাংশন () {কনসোল.লগ ("ফ্যাক্টরি ফাংশন বলে।"); নতুন মাইবজেক্ট ();}) ফিরিয়ে দিন;

আমরা এটি করি:

মোড.ফ্যাক্টরি ("মাইপ্রোভাইডার", ফাংশন () {কনসোল.লগ ("ফ্যাক্টরি ফাংশন বলে।"); নতুন ফাংশন রিটার্ন করুন () {// ইনলাইনড আমাদের অবজেক্ট কনস্ট্রাক্টর this.getValue = ফাংশন () {"আমার মান" ফেরান; };};});

সুতরাং পুরো জিনিস এখন এই মত দেখাচ্ছে:

মোড.ফ্যাক্টরি ("মাইপ্রোভাইডার", ফাংশন () {কনসোল.লগ ("ফ্যাক্টরি ফাংশন বলে।"); নতুন ফাংশন রিটার্ন করুন () {// ইনলাইনড আমাদের অবজেক্ট কনস্ট্রাক্টর this.getValue = ফাংশন () {"আমার মান" ফেরান; };};}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার.সেটভ্যালু ());}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার 2", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার 2 - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার.সেটভ্যালু ());});

জেএস ফিডল খুলুন

এখন যেহেতু আমাদের পুরো ফ্যাক্টরিটি একটি একক অবজেক্টের সমন্বয়ে গঠিত, তাই যদি আমরা কেবল সেই কৌতুকপূর্ণ চেহারার ফ্যাক্টরিটি লেখার পরিবর্তে অ্যাংজুলার অবজেক্ট কনস্ট্রাক্টর ফাংশনটি দিতে পারি তবে কি ভাল লাগবে না? আচ্ছা আপনি ভাগ্যবান, একটি পরিষেবা ঠিক এটি হয়।

আপনার পরিষেবাতে

এখানে কারখানার পরিবর্তে কোনও পরিষেবা ব্যবহার করা ছাড়া এটি একই কোড।

mod.service ("মাইপ্রোভাইডার", ফাংশন () CH // পরিবর্তন "ফ্যাক্টরি" থেকে "পরিষেবা" // নোট করুন যে একমাত্র ফাংশনটি পাস করা হচ্ছে এই.জেটভ্যালু = ফাংশন () এর আগে থেকে অবজেক্ট কনস্ট্রাক্টর {"আমার মান" ফেরান ;};}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার.সেটভ্যালু ());}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার 2", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার 2 - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার.সেটভ্যালু ());}); কনসোল আউটপুট মাইকন্ট্রোলার - মাইপ্রোভাইডার: আমার মান মাই কন্ট্রোলার 2 - মাইপ্রোভাইডার: আমার মান

জেএস ফিডল খুলুন

সরবরাহকারী বনাম কারখানা বনাম পরিষেবা

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

কখন অন্যটি বনাম ব্যবহার করবেন?

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

মোড.ফ্যাক্টরি ("মাইপ্রোভাইডার", ফাংশন () {কনসোল.লগ ("ফ্যাক্টরি ফাংশন বলে ডাকে।"); নতুন সামারমেসেজবক্সক্লাস ("কাস্টম আর্গুমেন্ট");}) ফেরান;

সরবরাহকারী এবং কারখানার মধ্যে সিদ্ধান্ত নেওয়ার অন্যতম প্রধান কারণ হ'ল আপনি উত্স তৈরির আগে তৈরি হওয়া বস্তুটি কনফিগার করতে সক্ষম হতে চান কিনা। আপনি মডিউল.কনফিগ () কে কল করে এবং প্রদানকারীর কাছে নিজেই একটি দৃষ্টান্ত পেয়ে (সরবরাহকারীর দ্বারা প্রত্যাবর্তিত বস্তুর পরিবর্তে) এটি করতে পারেন। আপনি যখন ইনজেকশন দিচ্ছেন তখন আপনার সরবরাহকারীর নামের শেষে "সরবরাহকারী" যুক্ত করে আপনি এটি করেন।

আপনি এটি কীভাবে করবেন তার উদাহরণ এখানে:

mod.provider ("myProvider", ফাংশন () {this.value = "আমার মান"; this.setValue = ফাংশন (newValue) {this.value = newValue;}; এটি $ get = ফাংশন () this এটি ফিরিয়ে দিন। মান;};}); মোডকন্ট্রোলার ("মাইকন্ট্রোলার", ফাংশন (মাইপ্রোভাইডার) so কনসোল.লগ ("মাইকন্ট্রোলার - মাইপ্রোভাইডার:" + মাইপ্রোভাইডার);}); মোডকনফিগ (ফাংশন (মাইপ্রোভিডারপ্রভাইডার) {// অ্যাডড কনফিগার বিভাগে // অতিরিক্ত "সরবরাহকারী" প্রত্যয়টি MyProviderProvider.setValue ("নতুন মান") নোট করুন;});

এটি সরবরাহকারী, কারখানা এবং পরিষেবা: তিনটি সরবরাহকারী কখন ব্যবহার করবেন তা অন্তর্ভুক্ত। এখানে একটি অতিরিক্ত সরবরাহকারী রয়েছে যা এখানে উল্লেখ করা হয়নি যা অন্য একটি বিশেষ কেস এবং এটির মূল্য সরবরাহকারী।

আপনি যদি মনে রাখেন যে আমরা যখন প্রথম কারখানার সরবরাহকারীর সাথে পরিচয় করিয়ে দিয়েছিলাম তখন আমরা স্ট্রিংয়ের মান ফেরত দেওয়ার সহজ উদাহরণ দিয়েছিলাম। এটি দেখতে এরকম দেখাচ্ছে:

মোড.ফ্যাক্টরি ("মাইপ্রোভাইডার", ফাংশন () "" আমার মান "ফেরান;});

ওয়েল আমরা আসলে এটি করতে পারতাম পরিবর্তে মান প্রদানকারী ব্যবহার করে, আবার সুবিধা হচ্ছে আপনি কম কোডে এটি করতে পারেন। নীচের কোডটি উপরের কোডের মতো একই কাজ করে:

mod.value ("মাইপ্রোভাইডার", "আমার মান");

সুতরাং আপনি যখন অন্য বনাম একটি ব্যবহার করবেন? সম্ভবত আপনি যখন অন্য কিছু ডেটার উপর ভিত্তি করে মান গণনা করতে চান তখন আপনি কারখানার প্রোভাইডারটি ব্যবহার করবেন, উদাহরণস্বরূপ অন্য কোনও মান প্রদানকারী বা কোনও বাহ্যিক উত্সের ডেটা। এবং / অথবা আপনি যখন মানটি গণনা করতে চান যখন এবং কেবল তখনই প্রথম অনুরোধ করা হয়। এখানে কিছু উদাহরন:

// উদাহরণ যেখানে ফ্যাক্টরি একটি "মান" সরবরাহকারী mod.value ("একাধিক", 3) উপর নির্ভর করে; মোড.ফ্যাক্টরি ("মান", ফাংশন (একাধিক) {রিটার্ন 10 * একাধিক;}); // উদাহরণ যেখানে ফ্যাক্টরি নির্ভর করে বহিরাগত ডেটা মোডের উপর actory

আমি কি বুঝিয়েছি যে মানটিই কেবল অন্য সরবরাহকারী ছিল? ভাল আমি মিথ্যা বলেছি, অন্য একটি ছোট ছোট পার্থক্যের সাথে মানের সাথে খুব মিল রয়েছে similar সেই সরবরাহকারীকে ধ্রুবক বলা হয়।

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

ভাল এটি মান এবং ধ্রুবক জন্য একই। কনফিগারেশন পর্ব থেকে ধ্রুবক পাওয়া যায় এবং মান হয় না। অন্যান্য পার্থক্যটি হ'ল নামটি বোঝায় আপনি ধ্রুবকের মান পরিবর্তন করতে পারবেন না। আপনি যে প্রথম মানটিকে এটি নির্ধারণ করেন সেটি হ'ল এটিই রাখে,

এখানে একটি উদাহরণ:

mod.value ("আমারভ্যালু", "প্রথম নিয়োগ"); mod.value ("আমারভ্যালু", "দ্বিতীয় বরাদ্দ"); মোডকনস্ট্যান্ট ("আমার কনস্ট্যান্ট", "প্রথম নিয়োগ"); মোডকনস্ট্যান্ট ("মাইকনস্ট্যান্ট", "দ্বিতীয় বরাদ্দ"); মোডকন্ট্রোলার ("মাইকন্ট্রোলার", ফাংশন (মাইভ্যালু, মাইকনস্ট্যান্ট) so কনসোল.লগ ("মাইভ্যালু:" + মাইভ্যালু); কনসোল.লগ ("মাইকনস্ট্যান্ট:" + মাইকনস্ট্যান্ট);}); কনসোল আউটপুট মাইভ্যালু: দ্বিতীয় অ্যাসাইনমেন্ট মাই কনস্ট্যান্ট: প্রথম অ্যাসাইনমেন্ট

এখানে প্রতিটি ব্যবহার করার একটি সংক্ষিপ্তসার এখানে দেওয়া হয়েছে:

মান

আপনি একটি সাধারণ আক্ষরিক মান প্রদান করছেন।

mod.value ("আমারভ্যালু", 10);
    

ধ্রুব

আপনার কনফিগারেশন পর্যায়ে সেই মানটি অ্যাক্সেস করতে হবে। (.config () ব্যবহার করে)

মোডকনস্ট্যান্ট ("মাইভ্যালু", 10); mod.config (ফাংশন (myValue) {কনসোল.লগ (মাইভ্যালু);});

কারখানা

আপনি যে মানটি সরবরাহ করছেন তা অন্য ডেটার ভিত্তিতে গণনা করা দরকার।

মোড.ফ্যাক্টরি ("মাইফ্যাক্টরি", ফাংশন () {রিটার্ন 10;});
        

সেবা

আপনি পদ্ধতি সহ কোনও জিনিস ফিরিয়ে দিচ্ছেন।

mod.service ("মাই সার্ভিস", ফাংশন () {var নাম = "বব"; this.setName = ফাংশন (newName) {this.name = newName;}; this.getName = ফাংশন () this ফেরত এই.নাম;} });
        

প্রদানকারী

আপনি কনফিগার করতে সক্ষম হতে চান, কনফিগার পর্বের সময়, অবজেক্টটি তৈরি হওয়ার আগে তৈরি হতে চলেছে।

mod.provider ("গ্রিটার", ফাংশন () {var নাম; this.setName = ফাংশন (newName) {নাম = newName;}; এই। $ get = ফাংশন () {নতুন ফাংশন ফিরে () {this.sayHi = ফাংশন () so কনসোল.লগ ("হাই" + নাম;};};};}); মোডকনফিগ (ফাংশন (গ্রিটারপ্রোভিডার) {গ্রিটারপ্রোভিডার.সেটনাম ("জন");});
        

এখানে সর্বশেষ পয়েন্টটি গাড়ি চালানোর জন্য এখানে কারখানার মান, এবং পরিষেবার অংশগুলি হাইলাইট করা সহ একটি সরবরাহকারীর চিত্র:


উত্তর 2:

অভ্যন্তরীণভাবে AngularJS পরিষেবা অবজেক্ট তৈরি করতে কারখানা ব্যবহার করছে এবং ফ্যাক্টরি অবজেক্ট তৈরি করতে সরবরাহকারী ব্যবহার করছে।

একটি কারখানা করে,

  1. একটি অবজেক্ট তৈরি করুন / ইনস্ট্যান্ট / কনস্ট্রাক্ট / তৈরি করা অবজেক্ট / ইন্সট্রাইজ তৈরি / তৈরি করা অবজেক্ট / ইনস্ট্যান্ট করুন

প্রসঙ্গ সেট করতে, কৌণিক কারখানাকে বিমূর্ত কারখানার নকশার ধরণ হিসাবে বিবেচনা করুন। অ্যাঙ্গুলারজেএস আপনাকে আপনার ফ্যাক্টরি পদ্ধতিটি ব্যবহার করে আপনার পছন্দের অবজেক্ট তৈরি করার বিকল্প দেয়, আপনি আপনার অ্যাপ্লিকেশনটিকে পরিষেবা হিসাবে ব্যবহারের জন্য তৈরি বস্তুটি ফিরিয়ে দেন।

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

var myModule = কৌণিক.মডিউল ('মাইমোডুল', []); myModule.constant ("পেমেন্টগেটওয়ে নাম", "স্ট্রিপ"); // অথবা "পেপাল" মাইমডিউল.ফ্যাক্টরি ('পেমেন্টসোসরাইজ', ফাংশন (পেমেন্টগেটওয়ে নাম) {বিভিন্ন পেমেন্ট সার্ভিস; // আপনি ব্যবসায়ের প্রয়োজনের ভিত্তিতে কোন অবজেক্ট তৈরি করবেন তা স্থির করেন // স্ট্রিপগেটওয়ে এবং পেপালগেটওয়ে জাভাস্ক্রিপ্ট ক্লাসে // গেটওয়ে নির্দিষ্ট প্রয়োগ রয়েছে যদি ( পেমেন্টগেটওয়ে নাম == "স্ট্রিপ") {পেমেন্টসেসওয়ার্স = নতুন স্ট্রাইপগেটওয়ে (); // স্ট্রাইপ গেটওয়ে আরম্ভ করার জন্য কাস্টম কোড (অন্যথায় (পেমেন্টগেটওয়ে নাম == "পেপাল") {পেমেন্টসেসওয়ার্স = নতুন পেপালগেটওয়ে (); পেপাল শুরুর জন্য কাস্টম কোড} / / কাস্টম কোড পেমেন্ট শুরু করার জন্য সার্ভিসেস রিটার্ন পেমেন্টসেবার;});

একটি পরিষেবা কোড দেখতে দেখতে, আপনি "এটি" কীওয়ার্ডটি লক্ষ্য করেন, এর অর্থ, ইতিমধ্যে আপনার জন্য কৌণিকর কোর দ্বারা অবজেক্ট তৈরি করা হয়েছে, আপনি আর কোনও নিয়ন্ত্রণের অবজেক্ট তৈরি করতে পারবেন না।

var myModule = কৌণিক.মডিউল ('মাইমোডুল', []); myModule.service ('ক্যাশে', ফাংশন () local var লোকাল ভ্যারিয়েবল = ""; // এই.cacheSize = 5; // 5 এমবি এর বাইরে অ্যাক্সেস করা যাবে না; // সর্বোচ্চ 1000 অবজেক্টস এই.পুট = ফাংশন (কী, মান) {...} this.get = ফাংশন (পান) {রিটার্ন ...}});

উত্তর 3:

অ্যাঙ্গুলারজেএস-এ বড় প্রশ্ন: পরিষেবা বনাম কারখানা v / s সরবরাহকারী। আমার কী ব্যবহার করা উচিত?

ইন্টারনেটে প্রচুর সংস্থান রয়েছে যা এই বিষয়টি নিয়ে আলোচনা করে। দেখা যাচ্ছে যে এই প্রশ্নটি এখনও প্রতি সপ্তাহে বা আরও বিভিন্ন চ্যানেলে উঠে আসে এবং স্ট্যাকওভারফ্লোতে শীর্ষ দশটি উত্তর পড়ার পরেও এটি এখনও খুব স্পষ্ট নয়।

আপনি যদি মনে করেন সেগুলি একই রকম - আপনি ঠিক বলেছেন। তারা খুব অনুরূপ। আসলে, তারা সবাই একই জিনিস y তারা সমস্ত সরবরাহকারী।

সম্পূর্ণ নিবন্ধ পড়ুন -> কৌণিক জেএস: পরিষেবা v / s কারখানা v / s সরবরাহকারী - 15 মিনিটের মধ্যে সাক্ষাত্কার প্রস্তুত হয়ে নিন