"আলংকারক" কী এবং সেগুলি কীভাবে ব্যবহৃত হয়?


148

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

কৌণিক ছেলেরা যেমন এটি একটি সজ্জা হয়:

পরিষেবার সজ্জা, সাজসজ্জারকে পরিষেবা উদাহরণ তৈরির জন্য বিরতি দেয়। প্রত্যাবর্তিত দৃষ্টান্তটি আসল উদাহরণ বা একটি নতুন উদাহরণ হতে পারে যা আসল দৃষ্টান্তগুলিতে প্রতিনিধিত্ব করে।

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

আমি এখনও এক ধরণের আঙ্গুলার জেএস নুব তাই আমি নিশ্চিত যে এটি কেবল অজ্ঞতা এবং / বা খারাপ অভ্যাসগুলি আমি গ্রহণ করেছি।

উত্তর:


219

একটি ভাল ব্যবহারের ক্ষেত্রে $provide.decoratorহ'ল যখন আপনাকে কিছু তৃতীয় পক্ষ / আপস্ট্রিম পরিষেবাতে গৌণ "ত্বক" করা দরকার, যার ভিত্তিতে আপনার মডিউল নির্ভর করে, পরিষেবাটি অটুট রেখে যাওয়ার কারণে (কারণ আপনি পরিষেবাটির মালিক / রক্ষণাবেক্ষণকারী নন)। এখানে plunkr উপর একটি বিক্ষোভ।


6
দারুণ উদাহরণ। আমি আসলে ভাবছিলাম কীভাবে তৃতীয় পক্ষের মডিউলগুলি তাদের সাথে হস্তক্ষেপ না করে কার্যকারিতা বাড়ানো যায়
আর্থার কোভাকস

5
আলংকারকাগুলি কি কোনও পরিষেবার সমস্ত দৃষ্টান্তগুলিকে আসলেই ডাকটাইপ করে না, বা সেগুলি কেবলমাত্র তাদেরকে সাজিয়ে তোলে এমন মডিউলটিতে যায়? অন্য কথায়, বলুন যে আমার কাছে মডিউল A রয়েছে যা মডিউল বি থেকে একটি পরিষেবা সজ্জিত করে আমার তখন মডিউল সি রয়েছে যা মডিউল এ এবং মডিউল বিয়ের উপর নির্ভর করে মডিউল বি এর ভিতরে, মডিউল বি এর পরিষেবাটি মূল বা সজ্জিত সংস্করণ?
জোন জ্যাকস

3
@ জোনজাকস - এটি একটি দুর্দান্ত প্রশ্ন। এরকম পরিস্থিতি আমি পারিনি। যদি আমি অনুমান করতে পারি, মডিউল সি যে সেবার সংস্করণটি দেখবে সেটি মডিউল এ থেকে সজ্জিত হওয়া উচিত তবে আমি নিজে চেষ্টা না করা পর্যন্ত আমি নিশ্চিতভাবে বলতে পারি না। আপনি কেন একটি সাধারণ প্লাঙ্কার / জেএসফিডল লিখেন না এবং এটি নিয়ে পরীক্ষা-নিরীক্ষা করুন। আপনি যদি আমাদের অনুসন্ধানগুলি আমাদের সাথে ভাগ করে নিতে পারেন তবে দুর্দান্ত লাগবে। চিয়ার্স।
tamakisquare

6
@ জোনজাকস - আমার কৌতূহল ধরে রাখতে পারিনি, তাই আপনার প্রশ্নের উত্তর, লিঙ্কের উত্তর খুঁজতে আমি আমার মূল উদাহরণটিতে কয়েকটি লাইন যুক্ত করেছি । সংক্ষেপে, আমার আগের মন্তব্যে অনুমানটি সঠিক।
tamakisquare

17
কারখানাগুলি, পরিষেবাদিগুলি ইত্যাদি এককভাবে ব্যবহৃত (যেমন তারা সরবরাহ করা হয়), তাই একবার সজ্জিত, সর্বদা সজ্জিত।
ফ্লেভারস্কেপ

66

সাজসজ্জনকারীরা আমাদের ক্রস কাটিং উদ্বেগগুলি আলাদা করতে এবং পরিষেবাগুলিকে "অবকাঠামো" কোড সম্পর্কে চিন্তা না করে একক-দায়িত্ব-নীতি সংরক্ষণ করার অনুমতি দেয়।

সজ্জাকারীদের ব্যবহারিক ব্যবহার:

  • ক্যাচিং: যদি আমাদের এমন কোনও পরিষেবা থাকে যা সম্ভাব্য ব্যয়বহুল এইচটিটিপি কল করে তবে আমরা পরিষেবাটি একটি ক্যাচিং ডেকরেটারে আবদ্ধ করতে পারি যা বাহ্যিক কল করার আগে লোকাল স্টোরেজ পরীক্ষা করে।
  • ডিবাগিং / ট্র্যাকিং: আপনার বিকাশ / উত্পাদন কনফিগারেশনের উপর নির্ভর করে একটি স্যুইচ থাকে যা আপনার পরিষেবাগুলি ডিবাগিং বা ট্রেসিং র‌্যাপারগুলির সাথে সজ্জিত করে।
  • থ্রোটলিং: ঘন ঘন ঘন ঘন ঘন ঘন ঘন কলম মোড়ানো calls উদাহরণস্বরূপ, আমাদেরকে রেট-সীমাবদ্ধ পরিষেবাদির সাথে সহজে ইন্টারঅ্যাক্ট করার অনুমতি দেয়।

এই সমস্ত ক্ষেত্রে, আমরা পরিষেবাটিতে কোডটিকে এর প্রধান দায়িত্বতে সীমাবদ্ধ করি।


10

decoratorদ্বারা নির্মিত সার্ভিস উদাহরণটি বাধা দিতে পারে factory, service, value, provider, এবং বিকল্পগুলির সাথে instance(service)কনফিগারযোগ্য নয় এমন কিছু পরিবর্তন করার বিকল্প দেয় ।

এটি পরীক্ষার উদ্দেশ্যে উদাহরণস্বরূপ মক আপ উদাহরণ সরবরাহ করতে পারে $http


1
এটি লক্ষণীয় যে আপনি বেন নাদেল দ্বারা উপস্থাপিতdirective সংজ্ঞাগুলিও ওভাররাইড করতে পারেন
ডেভিড সালামন

অফিসিয়াল কৌণিক ডক্সে এখানে উল্লেখ রয়েছে: https://docs.angularjs.org/guide/decorators
ডেভিড সালমন

3

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

আমরা কনস্ট্যান্ট সহ $ Provide.decorator ব্যবহার করতে পারি না কারণ তারা কেবল পঠিত সম্পত্তি হ'ল কনস্ট্যান্টগুলি পরিবর্তন করতে পারি না।


1

সংক্ষিপ্ত সজ্জাবিদগুলিতে নিম্নলিখিত হিসাবে বর্ণনা করা যেতে পারে:

ডেকোরেটর ফাংশন কোনও পরিষেবা তৈরিতে বাধা দেয়, এটি পরিষেবার আচরণকে ওভাররাইড বা সংশোধন করার অনুমতি দেয়।

এটি $provideকৌণিক দ্বারা পরিষেবাটি ব্যবহার করে এবং অন্য পরিষেবার প্রয়োগের পরিবর্তিত করে বা প্রতিস্থাপন করে

$provide.decorator('service to decorate',['$delegate', function($delegate) {
  // $delegate - The original service instance, 
  //             which can be replaced, monkey patched, 
  //             configured, decorated or delegated to. 
  //             ie here what is there in the 'service to decorate'

  //   This function will be invoked, 
  //   when the service needs to be provided 
  //   and should return the decorated service instance.
  return $delegate;
}]);

উদাহরণ:

$provide.decorator('$log', ['$delegate', function($delegate) {
  // This will change implementation of log.war to log.error
  $delegate.warn = $delegate.error; 
  return $delegate;
}]);

অ্যাপ্লিকেশন

জব্ল্যান্ড উত্তর ছাড়াও।

  • অ্যাপ্লিকেশন প্রশস্ত লোকেল সেটিংস:

    আপনি এখানে একটি উদাহরণ খুঁজে পেতে পারেন

  • কৌণিক পরিষেবা দ্বারা কোনও পরিষেবাটির ডিফল্ট আচরণ এবং বিদ্যমান প্রয়োগকে পরিবর্তন করা: -

    আপনি এখানে একটি উদাহরণ খুঁজে পেতে পারেন

  • বিভিন্ন পরিবেশে কোনও ক্রিয়াকলাপের আচরণ পরিবর্তন করা।

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