2010-12-03 13 views
0

抽出メソッド(Fowlerの本からのリファクタリング)は、メソッドで値が割り当てられていない場合に効果的です。 1つの値を割り当てると、抽出されたメソッドの戻り値になります。 2つの値を割り当てるとどうなりますか?2つの値を割り当てるメソッドを抽出するにはどうすればよいですか?

説明するためのいくつかのC#コード:

private void someBigFunction() { 
doSomething(); 
doSomethingElse(); 

// start extraction here 
string first = Database.Select(...); 
// ... 
// next is dependent on the value of "first" 
int next = Database.Select(...); 
// ... 
// stop extraction here 

doMoreUselessStuff(); 
} 

正確なコードまたは値がここでは重要ではありません。ポイントは、このメソッドを抽出しています。 (2つの値はリンクされているので、2つのメソッドを作成するのではなく、同じメソッドでそれらを持つことが理にかなっています)。

この質問に対する可能な回答は、両方のペアのようなデータ構造 "または"(参照渡しのパラメータを使用して) " - しかし、私は何か清潔を探しています。 (実際のコードはC#ではなくDelphiにあります)

答えて

0

おそらくSprout Classはあなたが探しているものです。 2つのメンバを新しいクラスのインスタンス変数にし、このメソッドをそのクラスに抽出し、インスタンス変数を割り当て、呼び出し元にゲッターを提供します。もちろん、ローカル変数を元のクラスのインスタンス変数に変換することもできます。この変換では、Extract Methodがより簡単になることがよくありますが、間違いなくインスタンス変数の超過分に気づきます。 Sproutクラスでは、それらの値を取得して提供することだけを目的としたクラスがあります。そのため、インスタンス変数にする必要があります。

+0

私はメソッドを持たないクラスを作るのは好きではありませんが、問題をきれいに解決します。変数のグループ化を開始すると、メソッドが続きます。 – ashes999

関連する問題