Tôi đã gặp một số mã vào ngày khác và tôi tự hỏi đó có phải là cách tốt nhất để làm điều đó hay không. Chúng ta có một phương thức lấy một chuỗi từ một số dữ liệu biểu mẫu web để thực hiện một thứ gì đó cho một đối tượng dựa trên chuỗi được truyền vào. Hiện tại, nó sử dụng sự phản chiếu để tìm ra hành động nào cần thực hiện, nhưng tôi tự hỏi liệu một câu lệnh switch có tốt hơn không .Nhà máy Phương pháp - trường hợp và phản ánh
Ví dụ:
Edit: Tôi đã thêm một lựa chọn thứ ba cho các đại biểu như ghi nhận của 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);
}
}
}
Ví dụ đầu tiên sử dụng công tắc và như bạn có thể nhìn thấy có thể nhận được rất tiết. Thứ hai là ngắn hơn nhiều, nhưng sử dụng sự phản ánh, mà tôi biết một số người tránh như bệnh dịch hạch.
Một phương pháp có thực hiện tốt hơn đáng kể so với phương pháp kia không?
Thay đổi hiệu suất sẽ có nếu có 100 hành động khác nhau thay vì chỉ 3?
Bạn thích xem mã nào trong mã nếu bạn đang đọc?
Đó là một câu hỏi khá nhiều về phong cách lập trình mệnh lệnh và bắt buộc. Kirk dường như thích cách bắt buộc, trong khi tôi thích cái thứ hai, như bạn có thể thấy từ câu trả lời của tôi. Không phải là "đúng" hoặc "sai", chỉ để làm rõ điều này. – Lucero