我有一个测试应用程序,有一个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,但我不知道将“一些工作”放在其中的最佳方法是什么。
在我看来,这是一个非常简单的问题,但我不知道应该搜索哪些关键字。所以,我很高兴看到只有一个关键字(模式名称或东西)或链接的答案。
答案 0 :(得分:5)
我确信还有更多,但是从我的头脑中,你可以用两种方式对这个锅炉板代码。
方法1 :使用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
});
}