मैं दूसरे दिन किसी कोड में आया और मुझे आश्चर्य हुआ कि क्या यह करने का सबसे अच्छा तरीका है। हमारे पास एक तरीका है जो कुछ वेब फॉर्म डेटा से एक स्ट्रिंग लेता है जो किसी स्ट्रिंग के आधार पर ऑब्जेक्ट में कुछ करता है। वर्तमान में, यह किस क्रिया को लेने के लिए प्रतिबिंब का उपयोग करता है, लेकिन मुझे आश्चर्य हुआ कि स्विच कथन बेहतर होगा या नहीं ।विधि फैक्टरी - केस बनाम प्रतिबिंब
उदाहरण:
संपादित करें: के रूप में Lucerno
public class ObjectManipulator
{
private void DoX(object o) { }
private void DoY(object o) { }
private void DoZ(object o) { }
public void DoAction(string action, object o)
{
switch (action)
{
case "DoX":
DoX(o);
break;
case "DoY":
DoY(o);
break;
case "DoZ":
DoZ(o);
break;
default:
throw new Exception(string.Format(
"Cannot locate action:{0}", action));
}
}
public void DoActionViaReflection(string action, object o)
{
MethodInfo method = typeof(ObjectManipulator).
GetMethod(action, new Type[] { typeof(object) });
if (method == null)
{
throw new Exception(string.Format(
"Cannot locate action:{0}", action));
}
else
{
method.Invoke(this, new object[] { o });
}
}
private Dictionary<string, Action<object>> _methods;
public ObjectManipulator()
{
_methods = new Dictionary<string, Action<object>>()
{
{"DoX", o => DoX(o)},
{"DoY", o => DoY(o)},
{"DoZ", o => DoZ(o)}
};
}
public void DoActionViaDelegates(string action, object o)
{
if (!_methods.ContainsKey(action))
{
throw new Exception(string.Format(
"Cannot locate action:{0}", action));
}
else
{
_methods[action](o);
}
}
}
द्वारा नोट पहला उदाहरण स्विच का उपयोग करता है और जैसा कि आप देख बहुत वर्बोज़ मिल सकता है कर सकते हैं मैं प्रतिनिधियों के लिए एक तीसरा विकल्प जोड़ा। दूसरा बहुत छोटा है, लेकिन प्रतिबिंब का उपयोग करता है, जो मुझे पता है कि कुछ लोग प्लेग की तरह बचते हैं।
क्या एक विधि अन्य महत्वपूर्ण रूप से बेहतर प्रदर्शन करेगी?
क्या प्रदर्शन में परिवर्तन होगा यदि केवल 3 की बजाय 100 अलग-अलग कार्रवाइयां होंगी?
यदि आप इसे पढ़ रहे थे तो आप अपने कोड में क्या देखते हैं?
यह अनिवार्य बनाम घोषणात्मक प्रोग्रामिंग शैली के बारे में काफी सवाल है। किर्क बाद में पसंद करते हैं, जबकि मैं बाद में पसंद करता हूं, जैसा कि आप मेरे उत्तर से देख सकते हैं। यह स्पष्ट करने के लिए, "दाएं" या "गलत" भी नहीं है। – Lucero