কম্পিউটার

রুবিতে ডেকোরেটর ডিজাইন প্যাটার্ন

ডেকোরেটর ডিজাইন প্যাটার্ন কি?

এবং কিভাবে আপনি আপনার রুবি প্রকল্পে এই প্যাটার্ন ব্যবহার করতে পারেন?

ডেকোরেটর ডিজাইন প্যাটার্ন আপনাকে নতুন ক্ষমতা যোগ করে একটি বস্তু উন্নত করতে সাহায্য করে ক্লাস পরিবর্তন না করেই এটিতে।

আসুন একটি উদাহরণ দেখি!

লগিং এবং কর্মক্ষমতা

এই উদাহরণে আমরা রেস্ট-ক্লায়েন্টের মতো একটি রত্ন ব্যবহার করে HTTP অনুরোধ করছি।

এটি দেখতে কেমন তা এখানে:

require 'restclient'

data = RestClient.get("www.rubyguides.com")

এখন :

ধরা যাক যে আমরা আমাদের কিছু অনুরোধে লগিং যোগ করতে চাই এবং আমরা RestClient পরিবর্তন করতে চাই না মডিউল।

আমরা ডেকোরেটর প্যাটার্ন ব্যবহার করে এটি করতে পারি।

এখানে আমাদের লগিং মডিউল আছে :

module LogHTTPRequest
  def get(url)
    puts "Sending Request For #{url}"
    super
  end
end

এটি স্ক্রিনে আমরা যে তথ্য চাই তা প্রিন্ট করবে তারপর আসল get এ কল করবে RestClient থেকে পদ্ধতি .

একটি অনুরোধে লগিং ক্ষমতা যোগ করতে আপনি extend ব্যবহার করতে পারেন পদ্ধতি।

এরকম :

class HTTPClient
  def initialize(client = RestClient)
    @client = client
  end

  def get(*args)
    @client.get(*args)
  end
end

client = HTTPClient.new
client.extend(LogHTTPRequest)

client.get("rubyguides.com")

আপনাকে এই HTTPClient তৈরি করতে হবে wrapper ক্লাস কারণ RestClient একটি মডিউল এবং আপনি মডিউল থেকে বস্তু তৈরি করতে পারবেন না।

কখন ডেকোরেটর প্যাটার্ন ব্যবহার করবেন

এই প্যাটার্নের সৌন্দর্য হল আপনি শুধুমাত্র একটি বস্তু উন্নত করছেন , যাতে আপনার একটি নন-লগিং ক্লায়েন্ট এবং একটি লগিং ক্লায়েন্ট থাকতে পারে।

আরেকটি সুবিধা হল আপনি এই ডেকোরেটরগুলিকে স্তর দিতে পারেন এবং একটি যেটি পারফরম্যান্স টেস্টিং করে, আরেকটি লগিং করার জন্য, ইত্যাদি।

আপনি যদি একটি HTTPClientWithLogging তৈরি করতে উত্তরাধিকার ব্যবহার করেন তবে ডেকোরেটরগুলিকে একত্রিত করা সম্ভব হবে না , এবং একটি HTTPClientWithPerformanceTesting ক্লাস।

রুবিতে ডেকোরেটর ডিজাইন প্যাটার্ন

আপনার কাছে WithLogging থাকতে পারে না এবং WithPerformanceTesting একই সময়ে যদি না আপনি এই ক্লাসটি তৈরি করেন…

class HTTPClientWithLoggingAndPerformanceTesting
  # ...
end

ডেকোরেটর প্যাটার্ন সমাধান করে কোড সদৃশ এড়ানোর সময় এই সমস্যা এবং পাগল শ্রেণীর নাম।

ভিডিও

সারাংশ

আপনি ডেকোরেটর ডিজাইন প্যাটার্ন সম্পর্কে শিখেছেন , এই প্যাটার্ন আপনাকে অবজেক্টে নতুন ক্ষমতা যোগ করতে সাহায্য করে ক্লাস পরিবর্তন না করেই।

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

এই নিবন্ধটি শেয়ার করুন যাতে আরো মানুষ এটি পড়তে পারে 🙂


  1. রুবি অবজেক্ট মডেল গভীরভাবে বোঝা

  2. রুবিতে কাস্টম ব্যতিক্রম

  3. রুবিতে সলিড ডিজাইনের নীতি

  4. রুবিতে স্টেট মেশিন তৈরি করতে AASM রত্নটি কীভাবে ব্যবহার করবেন