2012-04-22 5 views
4

は、私がこのようなブロックで構成されたクラスTestSeq及び方法ゴー()、で、テストアプリケーションを持っている:でテストアプリケーションをリファクタリングする方法は?

  _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を作成することについて考えますが、その中に「ある仕事」の部分を置くための最良の方法は何か分かりません。

これはかなり単純な問題ですが、検索するキーワードを知りません。だから、私はキーワード(パターン名か何か)かリンクだけで答えを見ることがうれしいです。

答えて

5

私の頭の上には、より多くのものがありますが、おそらくこのボイラープレートのコードは2通りあります。

方法1:関心のコードをラップするために使用した構文を使用し

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 
    }); 
} 
ように、コードのあなたのブロックに渡します
関連する問題