基になるソースを変更する必要がない(そのレベルでは実際には「私の」コードではない、そうでない場合は変更したい)という状況に遭遇しましたが、2つのほぼ同じコードパスがありますが、私が使用している別々のタイプのデータ。
おそらく一方を他方にかなり簡単に変換できることを無視すると、同様の例は「Circle」オブジェクトになります。
一方では、Point
オブジェクトと半径があります。一方、私はCircle
オブジェクトを持っています。これらは両方とも同じ実際の円を表すことができますが、私は一方を別の円に変換することはできません。
次に、私のコードでは、次のようになります。
void Run(Circle circle)
{
if(AllNegative(circle))
{
// ...
// Do unrelated stuff
// ...
ColorCircle(circle);
// ...
}
}
void Run(Point pt, uint radius)
{
if(AllNegative(pt, radius))
{
// ...
// Do unrelated stuff
// ...
ColorCircle(pt, radius);
// ...
}
}
bool AllNegative(Circle circle) { return (circle.AllNegative); }
bool AllNegative(Point pt, uint radius) { return ((pt.X + radius) < 0) && ((pt.Y + radius) < 0); }
void ColorCircle(Circle circle) { /* ... */ }
void ColorCircle(Point pt, uint radius) { /* ... */ }
もちろん、Run
この例よりも多くのコードが含まれています。
Run
コードの重複を最小限に抑えるために、単一の関数にマージするにはどうすればよいですか?