我偶然發現了一些代碼,我想知道這是否是最好的方法。我們有一種方法,它從一些web表單數據中獲取一個字符串,並根據傳入的字符串將數據轉換爲對象。目前,它使用反射來確定要採取的操作,但我想知道switch語句是否會更好。方法工廠 - 案例與反思
例子:
編輯:我添加了代表了第三種選擇,通過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);
}
}
}
注意的第一個例子使用的開關,你可以看到可以得到非常詳細。第二短得多,但使用反射,我知道一些人像瘟疫一樣避免反射。
一種方法的性能會明顯好於另一種方法嗎?
如果有100個不同的動作而不是3個,性能是否會改變?
如果您正在閱讀的內容,您更喜歡在代碼中看到哪些內容?
這幾乎是一個關於命令式和聲明式編程風格的問題。正如你從我的答案中可以看到的,Kirk似乎更喜歡命令式的方式,而我更喜歡後者。只是爲了明確這一點,不是「正確的」或「錯誤的」。 – Lucero 2010-11-20 19:21:14