मी और दो अन्य सहयोगी यह समझने की कोशिश कर रहे हैं कि प्रोग्राम को सर्वोत्तम तरीके से कैसे डिजाइन किया जाए। उदाहरण के लिए, मैं एक अंतरफलक ISoda
और कई वर्गों कि Coke
, Pepsi
, DrPepper
, आदि जैसे कि इंटरफ़ेस को लागू .... हैनिर्भरता इंजेक्शन का उपयोग करें
मेरे सहयोगी कह रहा है कि यह एक कुंजी/मान की तरह एक डेटाबेस में इन वस्तुओं डाल करने के लिए सबसे अच्छा है जोड़ी। उदाहरण के लिए:
Key | Name
--------------------------------------
Coke | my.namespace.Coke, MyAssembly
Pepsi | my.namespace.Pepsi, MyAssembly
DrPepper | my.namespace.DrPepper, MyAssembly
... फिर XML विन्यास फाइल है कि सही कुंजी के लिए इनपुट नक्शा है, कुंजी के लिए डेटाबेस क्वेरी, तो वस्तु बनाने के।
मेरे पास कोई विशिष्ट कारण नहीं है, लेकिन मुझे लगता है कि यह एक खराब डिज़ाइन है, लेकिन मुझे नहीं पता कि क्या कहना है या इसके खिलाफ सही तरीके से तर्क कैसे देना है।
मेरा दूसरा सहयोगी यह सुझाव दे रहा है कि हम इन वर्गों में से प्रत्येक को माइक्रो-प्रबंधित करें। तो मूल रूप से इनपुट एक स्विच बयान के माध्यम से कुछ समान जाना होगा, यह करने के लिए:
ISoda soda;
switch (input)
{
case "Coke":
soda = new Coke();
break;
case "Pepsi":
soda = new Pepsi();
break;
case "DrPepper":
soda = new DrPepper();
break;
}
यह एक छोटे से मेरे लिए बेहतर लगता है, लेकिन मैं अभी भी लगता है कि यह करने के लिए एक बेहतर तरीका है। मैं पिछले कुछ दिनों में आईओसी कंटेनरों पर पढ़ रहा हूं और यह एक अच्छा समाधान की तरह लगता है। हालांकि, मैं अभी भी निर्भरता इंजेक्शन और आईओसी कंटेनर के लिए बहुत नया हूं, इसलिए मुझे नहीं पता कि इसके लिए सही तरीके से बहस कैसे करें। या शायद मैं गलत हूं और ऐसा करने का एक बेहतर तरीका है? यदि हां, तो क्या कोई बेहतर तरीका सुझा सकता है?
मैं अपने सहयोगियों को किसी अन्य विधि की कोशिश करने के लिए टेबल पर किस प्रकार के तर्क ला सकता हूं? पेशेवर/विपक्ष क्या हैं? हमें इसे एक तरह क्यों करना चाहिए?
दुर्भाग्यवश, मेरे सहयोगी बदलने के लिए बहुत प्रतिरोधी हैं इसलिए मैं यह समझने की कोशिश कर रहा हूं कि मैं उन्हें कैसे समझा सकता हूं।
संपादित करें:
लगता है मेरे सवाल की तरह एक छोटा सा समझने के लिए मुश्किल है। हम यह पता लगाने की कोशिश कर रहे हैं कि कई इंटरफेस का उपयोग करने वाले एप्लिकेशन को सर्वोत्तम तरीके से डिज़ाइन करना है और इसमें उन इंटरफेस को लागू करने वाले कई ठोस प्रकार शामिल हैं।
हाँ, मुझे पता है कि डेटाबेस में यह सामान संग्रहीत करना एक बुरा विचार है, लेकिन हम बस एक बेहतर तरीके से नहीं जानते हैं। यही कारण है कि मैं पूछ रहा हूं कि कैसे हम इसे बेहतर करते हैं।
public void DrinkSoda(string input)
{
ISoda soda = GetSoda(input);
soda.Drink();
}
हम GetSoda
को सही तरीके से कैसे कार्यान्वित करते हैं? क्या हमें पूरे डिजाइन पर पुनर्विचार करना चाहिए? अगर इस तरह के जादू तारों को पार करना एक बुरा विचार है, तो हमें इसे कैसे करना चाहिए?
उपयोगकर्ता इनपुट जैसे "आहार कोक", "कोक", "कोक लाइम", या जो भी Coke
के प्रकार को तत्काल करेगा, तो एकाधिक कीवर्ड एक ही प्रकार के लिए मानचित्र होते हैं।
बहुत से लोगों ने कहा है कि उपरोक्त पोस्ट कोड खराब है। मुझे पता है कि यह बुरा है। मैं अपने सहयोगियों को पेश करने के कारणों की तलाश कर रहा हूं और तर्क देता हूं कि यह क्यों बुरा है और हमें क्यों बदलने की जरूरत है।
मैं क्षमा चाहता हूं कि यह स्पष्टीकरण अभी भी समझना मुश्किल है। मेरे लिए स्थिति का वर्णन करना मुश्किल है क्योंकि मैं वास्तव में समझ में नहीं आता कि इसे शब्दों में कैसे रखा जाए।
यह समझना वाकई मुश्किल है कि आप जिस वास्तविक समस्या को हल करने की कोशिश कर रहे हैं वह है। – mquander
कोड का आपका दूसरा ब्लॉक फ़ैक्टरी पैटर्न का उपयोग करते समय दिखाई देने वाली चीज़ जैसा दिखता है। क्या आप पूछ रहे हैं कि आपके पास पास किए गए आईएसओड के प्रकार का निर्धारण कैसे किया जाता है? – NitroxDM
वाह - डेटाबेस रिकॉर्ड में शब्दों को मैप करने के लिए एक्सएमएल फ़ाइल का उपयोग करके डेटाबेस में टाइपिंग नाम, और फिर उन्हें तुरंत चालू करने के लिए प्रतिबिंब का उपयोग करना - ** ** ** ** ** ** एंटरप्राइज़ है! ** – Aaronaught