私が考えることができる正当な理由: 重複を避けるためにコードがより複雑になる場合。基本的には、いくつかの方法でほぼ同じことを行う場所ですが、まったく同じではありません。もちろん、変更が必要なさまざまなメンバーへのポインターを含む特別なパラメーターをリファクタリングして追加できます。しかし、リファクタリングされた新しいメソッドは複雑になりすぎる可能性があります。
例 (疑似コード):
procedure setPropertyStart(adress, mode, value)
begin
d:=getObject(adress)
case mode do
begin
single:
d.setStart(SingleMode, value);
delta:
//do some calculations
d.setStart(DeltaSingle, calculatedValue);
...
end;
procedure setPropertyStop(adress, mode, value)
begin
d:=getObject(adress)
case mode do
begin
single:
d.setStop(SingleMode, value);
delta:
//do some calculations
d.setStop(DeltaSingle, calculatedValue);
...
end;
メソッド呼び出し (setXXX) をリファクタリングすることもできますが、言語によっては難しい場合があります (特に継承の場合)。本体の大部分は各プロパティで同じであるため、コードの重複ですが、共通部分をリファクタリングするのは難しい場合があります。
要するに、リファクタリングされた方法がより複雑な要因である場合、それは「悪」ですが(そして悪のままです)、コードの複製を使用します。