1. প্রক্সি প্যাটার্ন কি

প্রক্সি প্যাটার্ন হলো একটি স্ট্রাকচারাল ডিজাইন প্যাটার্ন, যা একটি নির্দিষ্ট অবজেক্টে অ্যাক্সেস নিয়ন্ত্রণ করতে একটি প্রক্সি হিসেবে কাজ করে। লক্ষ্য অবজেক্ট (প্রক্সি করা হচ্ছে অবজেক্ট) ভিত্তিকভাবে, প্রক্সি প্যাটার্ন একটি প্রক্সি অবজেক্ট সরবরাহ করে যা মাধ্যমে ক্লায়েন্টরা লক্ষ্য অবজেক্টে অ্যাক্সেস করতে পারে, লক্ষ্য অবজেক্টে অতিরিক্ত কার্যকারিতা যোগ করা যাবে।

1.1 প্রক্সি প্যাটার্নের সংজ্ঞা

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

1.2 প্রক্সি প্যাটার্নের উদ্দেশ্য এবং লক্ষ্য

প্রক্সি প্যাটার্নের মূল উদ্দেশ্যটি হলো লক্ষ্য অবজেক্টের একটি প্রত্যাগাত্মক উপায় সরবরাহ করা, যাতে লক্ষ্য অবজেক্টে অতিরিক্ত কার্যকারিতা যোগ করা যায়। প্রক্সি অবজেক্টগুলি সাধারণ লজিক, যেমন লক্ষ্য অবজেক্টে অ্যাক্সেস নিয়ন্ত্রণ, ক্যাশিং, এবং লগিং ব্যবহার করতে পারে। প্রক্সি প্যাটার্ন আলস্য লোডিং এবং লজ্জা লোডিং সমৃদ্ধ করতে পারে, লক্ষ্য অবজেক্টটি প্রয়োজন হলেই ইনস্ট্যান্ট করা।

2. প্রক্সি প্যাটার্নের চরিত্রিক এবং সুবিধাসমূহ

প্রক্সি প্যাটার্নের নিম্নলিখিত চরিত্রিক এবং সুবিধাসমূহ রয়েছে:

  • এটি লক্ষ্য অবজেক্টের কার্যকারিতা বিস্তার করতে পারে বিনা এর অংশ পরিবর্তন করা।
  • এটি প্রক্সি অবজেক্টের মাধ্যমে লক্ষ্য অবজেক্টে অ্যাক্সেস নিয়ন্ত্রণ করতে পারে।
  • এটি লক্ষ্য অবজেক্টে অ্যাক্সেসের আগে বা পরে অতিরিক্ত অপারেশন সম্পাদন করতে পারে।
  • এটি লজিকের লোডিং ব্যবহার করতে পারে, কেবলমাত্র ব্যবহারের প্রয়োজনে লক্ষ্য অবজেক্টটি ইনস্ট্যান্ট করা।

3. প্রক্সি প্যাটার্ন এর প্রায়োগিক অ্যাপ্লিকেশানের উদাহরণ

প্রক্সি প্যাটার্নটি অনেক অ্যাপ্লিকেশান স্কেনারিতে ব্যবহৃত হয়। এখানে কিছু প্রায়োগিক অ্যাপ্লিকেশানের সাধারণ উদাহরণগুলি দেওয়া হলো:

  • দূরবর্তী প্রক্সি: স্থানীয়ভাবে নেটওয়ার্কে অবজেক্টে অ্যাক্সেস করার জন্য ব্যবহৃত হয়।
  • ভার্চুয়াল প্রক্সি: প্রয়োজনে ব্যায়ামূলক অবজেক্টগুলি তৈরি করার জন্য ব্যবহৃত হয়।
  • সিকিউরিটি প্রক্সি: অবজেক্টে অ্যাক্সেস নিয়ন্ত্রণ করার জন্য ব্যবহৃত হয়।
  • স্মার্ট রেফারেন্স: অবজেক্টে অ্যাক্সেস করার সময় অতিরিক্ত অপারেশন, যেমন অবজেক্টের গণনা প্রয়োজন হলে বিদ্যমান বানাতে ব্যবহৃত হয়।

4.1 UML ক্লাস ডায়াগ্রাম

আগামীতে, Golang এ প্রক্সি প্যাটার্নের UML ক্লাস ডায়াগ্রামটি দেওয়া হল:

Golang Proxy Pattern

4.2 উদাহরণ পরিচিতি

মনে করুন আমাদের একটি ইন্টারফেস Subject আছে যা Request মেথডটি নির্ধারণ করে। আমাদের একটি ব্যাবহারযোগ্য অনুসারী ক্লাস RealSubject আছে, যা Subject ইন্টারফেস প্রভিড করে। তারপরে আমরা একটি প্রক্সি ক্লাস Proxy তৈরি করি, যা একটি RealSubject অবজেক্ট ধারণ করে এবং ছবি Subject ইন্টারফেস প্রভিড করে। Proxy ক্লাসের Request মেথডে, আমরা RealSubject এর Request মেথড কল করার আগে বা পরে কিছু অতিরিক্ত অপারেশন পারফরম করতে পারি।

4.3 প্রয়াণ পদক্ষেপ 1: প্রক্সি ইন্টারফেস ল্লেন্দ্ধ করা

প্রথমে, আমাদের একটি Subject ইন্টারফেস ডিফাইন করা প্রয়োজন:

package main

type Subject interface {
    Request()
}

4.4 বিষয়বস্তু অবজেক্ট ল্লেন্দ্ধ করা 2: লক্ষ্য অবজেক্ট ইমপ্লিমেন্ট করা

পরবর্তী, আমরা প্রয়ান্থন নির্দিষ্ট লক্ষ্য অবজেক্ট RealSubject প্রশুল্ক করি, যা Subject ইন্টারফেস ইমপ্লিমেন্ট করে:

package main

import "fmt"

type RealSubject struct {}

func (r *RealSubject) Request() {
    fmt.Println("RealSubject: Handling Request")
}

4.5 প্রয়ান্থন পদক্ষেপ 3: প্রক্সি অবজেক্ট ইমপ্লিমেন্ট করা

পরবর্তী, আমরা প্রক্সি অবজেক্ট, Proxy, তৈরি করি, যা একটি RealSubject অবজেক্ট ধারণ করে এবং এটি একটি ছবি ইন্টারফেস ইমপ্লিমেন্ট করে। Proxy এর Request মেথডে, আমরা একটি অতিরিক্ত অপারেশন পারফরম করতে পারি যা কল RealSubject এর Request মেথডের আগে বা পরে:

package main

import "fmt"

type Proxy struct {
    realSubject *RealSubject
}

func (p *Proxy) Request() {
    fmt.Println("Proxy: Pre-Request")
    
    if p.realSubject == nil {
        p.realSubject = &RealSubject{}
    }
    
    p.realSubject.Request()
    
    fmt.Println("Proxy: Post-Request")
}

4.6 প্রয়ান্থন পদক্ষেপ 4: প্রক্সি অবজেক্ট অনুরোধ করা

চেয়ে সময়, আমরা প্রক

5.1 প্রক্সি প্যাটার্ন এবং ডেকোরেটর প্যাটার্নের পার্থক্য এবং সংযোগ

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

  • প্রক্সি প্যাটার্ন সাধারণত লক্ষ্য বিষয়ক অবজেক্টে অ্যাক্সেস নিয়ন্ত্রণ করে, যখন ডেকোরেটর প্যাটার্ন বেশি বিস্তারিত লক্ষ্য বিষয়ক অবজেক্টে কেন্দ্রিক হয়।
  • প্রক্সি প্যাটার্ন সাধারণত লক্ষ্য বিষয়ক অবজেক্টের আগে বা পরে অতিরিক্ত অপারেশন পারফর্ম করে, যখন ডেকোরেটর প্যাটার্ন ডিনামিকভাবে লক্ষ্য বিষয়ক অবজেক্টের উপর অতিরিক্ত কার্যকলাপ যোগ করে।

5.2 স্ট্যাটিক প্রক্সি এবং ডায়নামিক প্রক্সির মধ্যে তুলনা

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

5.3 মাইক্রোসার্ভিসে প্রক্সি প্যাটার্নের অ্যাপ্লিকেশন

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