What is the correct C# design pattern for multiple methods, all accepting as params differing derived classes? -
मेरे पास एक बेस क्लास है:
वर्ग संदेश
और दो व्युत्पन्न कक्षाएं:
वर्ग SimpleMessage: संदेश वर्ग परिसरमॉडसेट: संदेश
कोड के दूसरे भाग में इन प्रकार का उपयोग किया जाता है:
शून्य प्रोसेससिंपल मेसेज (सरल मेसेज) शून्य प्रोसेस कॉम्प्लेक्स मेसेज (कॉम्प्लेक्स मेसेज एम)
ये विधियां क्लास संदेश के अंदर नहीं हैं, क्योंकि प्रसंस्करण का हिस्सा नहीं है संदेश।
अब, मैं एक if / else / switch संरचना से बचना चाहूंगा, क्योंकि कई प्रकार के संदेश हैं I यहां उपयोग करने के लिए सबसे अच्छा डिजाइन पैटर्न क्या है?
एक विकल्प रणनीति पैटर्न (कम से कम जैसा कि मैं समझता हूं) का उपयोग करने के लिए है:
class प्रक्रिया संदेश (प्रतिनिधि शून्य) ProcessMessageDelegate (संदेश मी) निजी संदेश मी; निजी प्रक्रिया संदेश अस्वीकृत प्रक्रिया संदेश; }
लेकिन क्या यह वास्तव में सबसे अच्छा अभ्यास है कि सभी प्रसंस्करण विधियों को आधार प्रकार संदेश स्वीकार किया जाए और अंदर डाली जाए? और एक और समस्या यह होगी कि संदेश का गतिशील प्रकार (साधारण या जटिल) वास्तव में इस कक्षा में 2 स्थानों पर संग्रहीत किया जाता है - संदेश और प्रक्रिया एल्गोरिदम, जो बदसूरत दिखता है।
कोई भी बेहतर समाधान क्या है?
धन्यवाद
क्यों न सिर्फ वर्चुअल विधि जोड़ें:
वर्ग संदेश {सार्वजनिक सार शून्य प्रक्रिया (); }
यदि आपको वास्तव में कोड को अलग रखने की आवश्यकता है:
वर्ग संदेश {सार्वजनिक सार शून्य प्रक्रिया (); } वर्ग SimpleMessage {सार्वजनिक ओवरराइड शून्य प्रक्रिया () (नया SimpleMessageProcessor ()। प्रक्रिया (); }} वर्ग SimpleMessageProcessor {आंतरिक शून्य प्रक्रिया () {// ...}}
मेरा मतलब है, हमें किस तरह की लचीलेपन की आवश्यकता है? क्या अन्य कक्षाएं शामिल हैं? आपके आस-पास का परिदृश्य क्या है? किसी अन्य संदर्भ के बिना, यह वास्तव में समझने की सबसे सरल विधि है, और कार्यान्वयन के लिए सबसे आसान तरीका है। कभी-कभी लोगों को डिज़ाइन क्रैफ्ट जोड़ते हैं, जब वास्तव में इसकी जरुरत नहीं होती है।
रणनीति पैटर्न आम तौर पर होता है यदि आप एक ही संदेश प्रकार की प्रक्रिया के लिए अलग-अलग तरीके चाहते हैं, और रनटाइम पर उन्हें स्विच करना चाहते थे यदि एक प्रकार की प्रोसेसिंग आम तौर पर एक प्रकार के संदेश के साथ जाती है, तो आपको इसे और अधिक जटिल बनाने की आवश्यकता नहीं है।
This comment has been removed by the author.
ReplyDelete