4

我有一个测试应用程序,它有一个类 TestSeq 和一个方法 Go(),它由以下块组成:

            _writer.WriteLine("Doing foo action...");
            var stopwatch = Stopwatch.StartNew();
            // foo - some work here
            stopwatch.Stop();
            _writer.WriteDone("Results of foo action.", stopwatch.Elapsed);

在“一些工作”中,我对 WCF 客户端(CRUD 操作、过滤器等)有不同的调用。

因此,大量代码重复,显然应该在这里进行一些重构。我考虑创建一个类TestAction,但我不知道将“一些工作”部分放入其中的最佳方式是什么。

在我看来,这是一个非常简单的问题,但我只是不知道我应该搜索什么关键字。因此,我很高兴看到仅包含关键字(模式名称或其他内容)或链接的答案。

4

1 回答 1

5

我敢肯定还有更多,但在我脑海中,你可能可以通过两种方式来编写这个样板代码。

方法一:使用 using 语法包装感兴趣的代码

class MeasuredOperation : IDisposable
{
    Stopwatch stopwatch;
    string message;

    public MeasuredOperation(string message)
    {
        Console.WriteLine("Started {0}", message);
        stopwatch = Stopwatch.StartNew();
        this.message = message;
    }

    public void Dispose()
    {
        stopwatch.Stop();
        Console.WriteLine("Results of {0} Elapsed {1}", this.message, this.stopwatch.Elapsed);
    }
}

    static void Main(string[] args)
    {
        using (new MeasuredOperation("foo action"))
        {
            // Do your action
        }
    }

方法 2:创建一个新函数并作为委托传入您的代码块

static void MeasuredAction(string message, Action action)
{
    Console.WriteLine("Started {0}", message);
    var stopwatch = Stopwatch.StartNew();
    action();
    stopwatch.Stop();
    Console.WriteLine("Results of {0} Elapsed {1}", message, stopwatch.Elapsed);
}

static void Main(string[] args)
{
    MeasureAction(delegate()
    {
        // do work
    });
}
于 2012-04-22T07:28:32.807 回答