1. চেইন অব রিস্পন্সিবিলিটি প্যাটার্ন কি
চেইন অব রিস্পন্সিবিলিটি প্যাটার্ন হলো একটি ব্যাবহারিক নকশা প্যাটার্ন, যা একটি অনুরোধের প্রেরক এবং প্রাপকের মধ্যে পার্থক্য তৈরি করে, এটির মাধ্যমে একটি অনুরোধের প্রাপক একাধিক অবজেক্টকে অনুরোধ হ্যান্ডেল করার সুযোগ পায়। প্রত্যেক প্রাপকের একটি অন্য প্রাপকের রেফারেন্স থাকে, এবং যদি এটা অনুরোধ না হ্যান্ডেল করতে পারে, তবে এটি পরবর্তী প্রাপকের কাছে অনুরোধ পাঠায় যেতে পারে অথবা অব্যাহতি অবস্থায়র প্রাপকে পৌঁছানো হয়।
2. চেইন অব রিস্পন্সিবিলিটি প্যাটার্নের বৈশিষ্ট্য এবং সুবিধাসমূহ
চেইন অব রিস্পন্সিবিলিটি প্যাটার্নের বৈশিষ্ট্য এবং সুবিধাসমূহ হলো:
- প্রেরক এবং প্রাপকের পার্থক্য: প্রেরকের দরকার নেই যে প্রাপক কোনটি দক্ষতা দিয়ে অনুরোধ হ্যান্ডেল করে, তারা না দরকার যে হ্যান্ডলারগুলি চেইনে।
- ফ্লেক্সিবিলিটি: এটি চেইনে হ্যান্ডলাররা ব্যবহার করে প্রোগ্রামের কোড পরিবর্তন করা ছাড়ান৷
- একাধিক কাজের দায়িত্ব: নতুন নির্দিষ্ট হ্যান্ডলার যোগ করে দায়িত্বের চেইন অনুসরণ করা সহজ।
- একল দায়িত্ব: প্রত্যেক নির্দিষ্ট হ্যান্ডলার কেবল নিজের নিজের হ্যান্ডেলিং লজিক নিয়ে চিন্তা করতে হয়।
- কনফিগুরেবিলিটি: প্রয়োজনীয়তা অনুযায়ী হ্যান্ডলারগুলির চেইন কনফিগার করা যায়, যা বিভিন্ন অনুরোধের জন্য বিভিন্ন হ্যান্ডলার চেইন করতে দেয়।
3. চেইন অব রিস্পন্সিবিলিটি প্যাটার্নের ব্যবহারের প্রায়োজনীয়িক আপলিকেশনের উদাহরণ
চেইন অব রিস্পন্সিবিলিটি প্যাটার্নের ব্যবহারের প্রায়োজনীয়িক আপলিকেশন হলো:
- ওয়েব অ্যাপ্লিকেশনে অনুরোধের ব্যবস্থাপনা: এটি ব্যবহার করা যায় এক্ষেত্রে, যেমন আইডেন্টিটি প্রমাণীকরণ, লগইন, এবং অনুমতি যাচাইকরণ ইত্যাদি ধরণের অনুরোধের ব্যবস্থাপনা করার জন্য।
- ত্রুটি ব্যবস্থাপনা: এটি কোনও ত্রুটি সম্পর্কে ব্যবহার করা যায়, যেহেতু প্রত্যেক হ্যান্ডলার একটি নির্দিষ্ট প্রকারের ত্রুটির জন্য দায়িত্বশীল এবং প্রয়োজন অনুসারে ত্রুটিকে পরবর্তী হ্যান্ডলারে পাঠাতে পারে।
- ইভেন্ট ব্যবস্থাপনা: এটি ব্যবহার করা যায় ভিন্ন প্রকারের ইভেন্ট ব্যবস্থাপনা করার জন্য, যেমন ব্যবহারকারীর ক্লিক ইভেন্ট, নেটওয়ার্ক অনুরোধ ইভেন্ট ইত্যাদি।
4. গোল্যাংগে চেইন অব রিস্পন্সিবিলিটি প্যাটার্ন এর অনুষ্ঠান
4.1 ইউএমএল ক্লাস ডায়াগ্রাম
4.2 উদাহরণ পরিচিতি
উপরে দেওয়া ইউএমএল ক্লাস ডায়াগ্রামে, আমরা একটি সার্বত্রিক স্নায়ু (হ্যান্ডলার) এবং দুটি সাংকেতিক হ্যান্ডলার (কনক্রিট হ্যান্ডলার1 এবং কনক্রিট হ্যান্ডলার2) সংজ্ঞায়িত করেছি যেখানে ক্লায়েন্ট (ক্লায়েন্ট) একাধিক্ষণে হ্যান্ডেলটি রিকোয়েস্ট সরাসরি করে।
4.3 অনুষ্ঠানের পদক্ষেপ 1: সার্বত্রিক হ্যান্ডলার ইন্টারফেস সংজ্ঞায়িত করা
type Handler interface {
HandleRequest(request Request) error
SetNext(handler Handler)
}
type Request interface {
Condition bool
}
সার্বত্রিক হ্যান্ডলার ইন্টারফেসটি মনের মধ্যে আনুরোধ প্রক্রিয়া করার জন্য হ্যান্ডলার ইন্টারফেসটি। এবং পরবর্তী হ্যান্ডলার সেট করার জন্য SetNext মেথডটি সংজ্ঞায়িত করে।
4.4 অনুষ্ঠানের পদক্ষেপ 2: কনক্রিট হ্যান্ডলার ক্লাসগুলি অনুষ্ঠান
type ConcreteHandler1 struct {
next Handler
}
func (h *ConcreteHandler1) HandleRequest(request Request) error {
// অনুরোধ সম্পর্কিত লজিক
if request.Condition {
// অনুরোধ সম্পর্কিত লজিকের কোড
return nil
} else {
if h.next != nil {
return h.next.HandleRequest(request)
}
return errors.New("হ্যান্ডলার পাওয়া যায়নি")
}
}
func (h *ConcreteHandler1) SetNext(handler Handler) {
h.next = handler
}
type ConcreteHandler2 struct {
next Handler
}
func (h *ConcreteHandler2) HandleRequest(request Request) error {
// অনুরোধ সম্পর্কিত লজিক
if request.Condition {
// অনুরোধ সম্পর্কিত লজিকের কোড
return nil
} else {
if h.next != nil {
return h.next.HandleRequest(request)
}
return errors.New("হ্যান্ডলার পাওয়া যায়নি")
}
}
func (h *ConcreteHandler2) SetNext(handler Handler) {
h.next = handler
}
সাংকেতিক হ্যান্ডলার ক্লাসগুলি সার্বত্রিক হ্যান্ডলার ইন্টারফেস অনুসরণ করে এবং HandleRequest এবং SetNext মেথডগুলি অভিলিখিত করে।
4.5 অনুষ্ঠানের পদক্ষেপ 3: চেইন অব রিস্পন্সিবিলিটি তৈরি করা
handler1 := &ConcreteHandler1{}
handler2 := &ConcreteHandler2{}
handler1.SetNext(handler2)
কনক্রিট হ্যান্ডলার তৈরি করে এবং পরবর্তী হ্যান্ডলার সেট করে, চেইন অব রিস্পন্সিবিলিটি তৈরি হয়।
4.6 অনুষ্ঠানের পদক্ষেপ 4: ক্লায়েন্ট কোড
func main() {
handler := &ConcreteHandler1{}
// চেইন অব রিস্পন্সিবিলিটি তৈরি করা
handler.SetNext(&ConcreteHandler2{})
// একটি অনুরোধ পাঠানো
handler.HandleRequest(Request{Condition: true})
}
ক্লায়েন্ট কোডে, সাংকেতিক হ্যান্ডলার তৈরি করা হয়, পরবর্তী হ্যান্ডলার সেট করা হয়, এ