C# में उन्नत डिज़ाइन पैटर्न: सिद्धांत से व्यवहार तक
डिज़ाइन पैटर्न (Design Patterns) सॉफ्टवेयर आर्किटेक्चर की सामान्य समस्याओं के सिद्ध समाधान हैं। शुरुआती स्तर पर डेवलपर्स Singleton, Factory या Adapter से परिचित होते हैं। हालाँकि, .NET प्लेटफॉर्म पर लचीली, रखरखाव योग्य और स्केलेबल सिस्टम बनाने के लिए अधिक जटिल व्यवहारिक और संरचनात्मक पैटर्न में महारत हासिल करना आवश्यक है। इस लेख में हम तीन उन्नत पैटर्न पर चर्चा करेंगे: Chain of Responsibility, State और Visitor। प्रत्येक पैटर्न को C# में भाषा की आधुनिक सुविधाओं (records, pattern matching, generics) का उपयोग करके व्यावहारिक उदाहरण के साथ समझाया जाएगा।
1. Chain of Responsibility (जिम्मेदारी की श्रृंखला)
Chain of Responsibility पैटर्न अनुरोध को हैंडलर की श्रृंखला में क्रमिक रूप से भेजने की अनुमति देता है, जब तक कि उनमें से कोई एक अनुरोध को संसाधित न कर दे। यह प्रेषक को प्राप्तकर्ता से कठोर रूप से जोड़ने से बचाता है। C# में इसका उपयोग अक्सर ASP.NET Core में middleware या डेटा सत्यापन के लिए किया जाता है।
उदाहरण: एक्सेस अधिकार जाँच प्रणाली
मान लीजिए हमारे पास कोई ऑपरेशन करने का अनुरोध है। प्रत्येक हैंडलर एक शर्त (प्रमाणीकरण, प्राधिकरण, सीमाएँ) की जाँच करता है।
// बेस हैंडलर क्लासpublic abstract class Handler{ protected Handler? NextHandler;
public void SetNext(Handler handler) => NextHandler = handler;
public abstract void Handle(RequestContext context);}
public class AuthenticationHandler : Handler{ public override void Handle(RequestContext context) { if (context.IsAuthenticated) { Console.WriteLine("प्रमाणीकरण सफल।"); NextHandler?.Handle(context); } else { Console.WriteLine("त्रुटि: उपयोगकर्ता प्रमाणित नहीं है।"); } }}
public class AuthorizationHandler : Handler{ public override void Handle(RequestContext context) { if (context.Role == "Admin") { Console.WriteLine("प्राधिकरण सफल।"); NextHandler?.Handle(context); } else { Console.WriteLine("त्रुटि: अपर्याप्त अधिकार।"); } }}
// अनुरोध संदर्भpublic record RequestContext(bool IsAuthenticated, string Role);
// उपयोगvar authHandler = new AuthenticationHandler();var authzHandler = new AuthorizationHandler();authHandler.SetNext(authzHandler);
var context = new RequestContext(true, "Admin");authHandler.Handle(context);// आउटपुट:// प्रमाणीकरण सफल।// प्राधिकरण सफल।यह पैटर्न प्रोसेसिंग पाइपलाइन बनाने के लिए आदर्श है, जहाँ प्रत्येक चरण निष्पादन को रोक सकता है या आगे नियंत्रण स्थानांतरित कर सकता है।
2. State (अवस्था)
State पैटर्न किसी वस्तु को आंतरिक अवस्था बदलने पर अपना व्यवहार बदलने की अनुमति देता है। बाह्य रूप से ऐसा लगता है जैसे वस्तु अपना वर्ग बदल रही है। C# में इसे इंटरफेस और कम्पोज़िशन के माध्यम से लागू करना सुविधाजनक है।
उदाहरण: ऑनलाइन स्टोर में ऑर्डर प्रबंधन
ऑर्डर अवस्थाओं में हो सकता है: नया, भुगतान किया गया, भेजा गया, वितरित किया गया। प्रत्येक अवस्था यह निर्धारित करती है कि कौन सी क्रियाएँ अनुमत हैं।
// अवस्था इंटरफ़ेसpublic interface IOrderState{ void Pay(Order order); void Ship(Order order); void Deliver(Order order);}
// विशिष्ट अवस्थाएँpublic class NewOrderState : IOrderState{ public void Pay(Order order) { Console.WriteLine("ऑर्डर का भुगतान किया गया।"); order.State = new PaidOrderState(); }
public void Ship(Order order) => Console.WriteLine("त्रुटि: ऑर्डर का अभी भुगतान नहीं हुआ है।"); public void Deliver(Order order) => Console.WriteLine("त्रुटि: ऑर्डर अभी भेजा नहीं गया है।");}
public class PaidOrderState : IOrde