1

次の2つの方法があります。

class Debug
{
    static bool OutputToConsole = true;

    public static void Log(string Type, string URL, StringBuilder Parameters)
    {
        string Output = Type + ":" + new string(' ', 9 - Type.Length) + URL + " { " + Parameters.ToString() + " }";
        Trace.WriteLine(Output);
        if(OutputToConsole) Console.WriteLine(Output);
    }

    public static void Log(string Data)
    {
        string Output = "Response: " + Data;
        Trace.WriteLine(Output);
        if(OutputToConsole) Console.WriteLine(Output);
    }
}

気づけば、string Output変わっているのは だけです。

その後の 2 行は、どちらの方法でも同じです。

DRYの原則を守り、これら2つの方法を組み合わせる方法があるかどうか疑問に思っていましたか?

4

4 に答える 4

3

共通コードをプライベート ヘルパー関数にリファクタリングします。

private static void LogHelper(string text)
{
    Trace.WriteLine(text);
    if(OutputToConsole) Console.WriteLine(text);
}

(名前が変更されていることに注意して、 とは署名が異なるようにしてくださいLog(string Data)。)

次に、他の両方からその関数を呼び出すだけです。

于 2013-04-09T17:25:21.613 に答える
2

これがどれだけ改善されたかはわかりません...

class Debug
{
    static bool OutputToConsole = true;

    public static void LogRequest(string type, string url, StringBuilder params)
    {
        log(type + ":" + new string(' ', 9 - type.Length) + url + " { " + params.ToString() + " }");
    }

    public static void LogResponse(string data)
    {
        log("Response: " + data);
    }

    private static void log(string msg)
    {
        Trace.WriteLine(msg);
        if(OutputToConsole) Console.WriteLine(msg);
    }
}
于 2013-04-09T17:25:22.027 に答える