यह प्रश्न शायद पहले पोस्ट किया गया है, लेकिन मुझे यह नहीं मिला।इंटरफ़ेस या स्विच स्टेटमेंट, सही पैटर्न ढूंढना
मैं इतने लंबे समय के लिए बात की इस तरह लिख रहा है, मैं बैठ जाओ कुछ नया लिखने के लिए और सिर्फ अगर यह अपने ही पैटर्न थे के रूप में इस लिखना प्रारंभ करें। एक परियोजना हाल ही में आई और मैंने खुद को अपने कोड को देखकर पाया कि यह कितना सुगंधित दिख रहा है।
BackgroundInfoIfYouCare
इस विशेष पुस्तकालय में मुझे उपयोगकर्ताओं को ईमेल भेजने की आवश्यकता है। अभी तक 13 डिब्बाबंद ईमेल हैं।
प्रत्येक ईमेल में इसका अपना टेम्पलेट होता है (मैं एक रेजर पार्सर का उपयोग कर रहा हूं, इसलिए टेम्पलेट्स cshtml में लिखे गए हैं)। प्रत्येक ईमेल टेम्पलेट में स्ट्रिंग का नाम कुंजी है। प्रत्येक ईमेल में "सदस्यता" इकाई और सभी संबंधित डेटा के आधार पर मॉडल को वापस करने के लिए स्वयं की EF4 क्वेरी होती है।
मेरे पास एक कक्षा है जो एक ईमेल टेम्पलेट नाम कुंजी है जो एक स्ट्रिंग स्वीकार करता है।
विधि उचित क्वेरी चलाएगी और एक सूची वापस ले जाएगी, ईमेल टेम्पलेट पकड़ लेता है।
सूची और टेम्पलेट एक पार्सर के लिए पारित करने के लिए टेम्पलेट की सदस्यता से प्रत्येक मर्ज करने के लिए और एक सूची ईमेल ढूंढ कर रहे हैं।
EndOfBackgroundInfoIfYouCare
तो असली सवाल ... ऐसा करने का सबसे अच्छा तरीका क्या है?
एक तरह से बस एक स्विच
public List<Membership> Execute(string TemplateKey) {
switch (TemplateKey)
{
case "SomethingExpired":
QueryResult = new SomethingExpiredEmailQuery().ExecuteQuery();
break;
case "SomethingExpireIn30":
QueryResult = new SomethingExpireIn30EmailQuery().ExecuteQuery();
break;
case "FirstTimeLoginThanks":
QueryResult = new FirstTimeLoginThanksEmailQuery().ExecuteQuery();
break;
case "SecurityTraining":
QueryResult = new SecurityTrainingEmailQuery().ExecuteQuery();
break;
case ETC ETC ETC...
}
एक और तरीका है एक अंतरफलक
IEmailQuery
void ExecuteQuery()
उपयोग करने के लिए किया जाएगा लेकिन अगर मैं एक इंटरफ़ेस का उपयोग मैं अभी भी करने की आवश्यकता होगी उपयोग करने के लिए है क्वेरी कक्षा को तुरंत चालू करें। यह कोई कोड सहेजता है और कोड को बनाए रखने में आसान नहीं बनाता है।
प्रतिबिंब के साथ मैं नाम की तरह कुछ कर सकता है एक पैटर्न के साथ ईमेल सभी जिज्ञासाओं के: SecurityTraining की ईमेल टेम्पलेट कुंजी SecurityTrainingEmailQuery के एक प्रश्न का नाम है और मैं प्रतिबिंब इस्तेमाल कर सकते हैं का दृष्टांत और ExecuteQuery विधि कॉल करने के।
प्रतिबिंब का उपयोग किए बिना, क्या इसे तारों का कोई क्लीनर तरीका नहीं है?
खैर, जॉन का जवाब समान है, केवल एक और तरीका उन्नत है तो मेरा डर है ;-) – Lindan