|
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() { //... } //... }
|