[英]C# Refactoring Code
目前,我的代碼看起來像這樣
Status("Start Step 1");
result = Step1();
Status("End Step 1", result);
Status("Start Step 2");
result = Step2();
Status("End Step 2", result);
Status("Start Step 3");
result = Step3();
Status("End Step 3", result);
是否有可能以某種方式重構此代碼並擺脫狀態行。 -但是,在每個步驟的開始和結束時更新狀態非常重要。
我考慮過將狀態行移到Step1,2,3調用中,但這只會使方法混亂。
public void ExecuteAndLog(Func<T> func, string startMessage, string endMessage) {
Status(startMessage);
var result = func;
Status(endMessage, result);
}
與明顯的調用
您可以根據需要進行優化。 例如,在上一個基礎上:
public void ExecuteAndLog(Func<T> func, string message) {
ExecuteAndLog(func, "Start " + message, "End " + message);
}
使調用稍微簡單甚至
public void ExecuteAndLog(Func<T> func, int stepNumber) {
ExecuteAndLog(func, String.Format("Step {0}", stepNumber));
}
建立在以前的基礎上。 所以現在你可以說
ExecuteAndLog(Step1, 1);
ExecuteAndLog(Step2, 2);
ExecuteAndLog(Step3, 3);
相對於@Jason的改進
public object ExecuteAndLog(Func<T> func, int number) {
Status(string.Format("Start Step {0}", number));
var result = func;
Status(string.Format("End Step {0}", number), result);
return result;
}
// and used like:
var result = ExecuteAndLog(Step1, 1);
result = ExecuteAndLog(Step2, 2);
result = ExecuteAndLog(Step3, 3);
也許是這樣的:
public void RunStep<T>(string stepName, Func<T> stepFunc)
{
Status("Start Step " + stepName);
var result = stepFunc();
Status("End Step " + stepName, result);
}
這將被稱為:
RunStep("1", Step1);
RunStep("2", Step2);
RunStep("3", Step3);
您可以使用Spring.Net記錄器來避免再次調用Status。
謝謝。
如果它們都返回相同的結果類型,則可以這樣做
Runner(Step1, Step2, Step3);
public void Runner<T>(params Func<T>[] stepList)
{
foreach (var act in stepList)
{
Status(act.Method.Name + "Started");
var result=act.Invoke();
Status(act.Method.Name + "Ended", result);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.