簡體   English   中英

C#重構代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM