|
Replace Method with Method Objectとは、長いメソッドをリファクタリングしようとしたときに、ローカル変数がたくさんあってExtract Methodなどが単純に行えないときに使用するテクニックです。 リファクタリング前: using System;
public class StockFinder
{
//...
public Code GetNextTargetStock(DateTime date, Data data)
{
int temp1 = 0;
int temp2 = 0;
int temp3 = 0;
int result = 0;
//
//date, data, temp1, 2, 3を使用した長い計算
//...
return result;
}
}
リファクタリング後: using System;
public class StockFinder
{
//...
TargetStockFinder targetStockFinder = new TargetStockFinder();
Code targetStock = targetStockFinder.GetNextTargetStock();
}
public class TargetStockFinder
{
private DateTime date;
private Data data;
private int temp1;
private int temp2;
private int temp3;
int result;
//コンストラクタに必要なパラメーターを渡す
//元のメソッドの引数とほぼ同じになるはず
public TargetStockFinder(DateTime date, Data data)
{
this.date = date;
this.data = data;
}
public Code GetNextTargetStock()
{
return Compute1() + (Compute2() * Compute3());
}
//Extract Methodを使って小さいメソッドに分割していく
private int Compute1()
{
return temp1 + temp2 * GetAppropriateWait();
}
private int GetAppropriateWait()
{
//...
}
//...
}
|
||||||||||||||||||||||