2011-12-28 9 views
3

多くのifを含み、各ブロックに異なるシナリオが含まれている以下のコードをどのようにリファクタリングしますか?リファクタリングifs

if(condition1) 
{ 
    ConfigCondition1(); 
    GetSetCondition1Results(); 
} 
if(condition2) 
{ 
    ConfigCondition2(); 
    GetSetCondition2Results(); 
} 
if(condition3) 
{ 
    ConfigCondition3(); 
    GetSetCondition3Results(); 
} 
+0

なぜリファクタリングするのですか? おそらくswitch文を使用します –

+0

なぜそれをどのようにリファクタリングしたいのですか?私の答えは今ユースケースになります(しかし、それは私が考えていることを助けてくれません) – Moonlight

+0

多態性は答えかもしれませんが、あなたが何をしているのか、何を達成しようとしているのか分かりません。このコード部分はどんなコンテキストですか? – Oded

答えて

3

Strategy Design Patternを使用します。

戦略パターンはオブジェクト内にアルゴリズムをカプセル化し、条件文を簡単な関数呼び出しにリファクタリングするのに役立ちます。

Here is a nice example in .NETです。

2

Strategy patternあなたの問題に最適と思われます。

ストラテジパターンを使用すると、クライアントは実行されたアルゴリズムのセットから実行時に実行されるアルゴリズムを選択できます。

0

このガイドラインに従ってください。

  • ifステートメントはすべて同じ値と比較されますか?はいの場合は、switchブロックを使用してください。
  • ifブロックは他のブロックを除外しますか?はいの場合はelse ifを使用してください。
  • 1つのブロックは別のブロックの値に依存しますか?はいの場合は、それらを別のものの中に入れます。
  • 上記のいずれにも該当しない場合、つまり、すべてのブロックを関係なくチェックする必要がある場合は、最適化を行うことはできません。
関連する問題