2009-03-04 6 views
0

のように、 がチェックするメソッド内で少量のコード複製について意見を聞きたいと思います。コードの複製とリファクタリング

While(condition){ 
...... do x 

} 

それは悪夢をバージョン管理することができますよう、レプリケーションのこの種のいずれかがあった。通常ならば、私はコードをリファクタリングでしょう、あなたはすべてのインスタンスを変更する必要があります例えば、条件の変更ではなく、素敵な仕事は何をすべき場合。 しかし、条件が比較的単純で、3つのメソッドの中でのみ使用される場合は、リファクタリングするのが賢明でしょうか。

要するに、リファクタリングコードではどこに線を引いていますか?

答えて

3

リファクタリングは無料ではありません。コードを変更すると、バグが発生する可能性があります。したがって、すべての意欲的な開発者は、彼が変更を慎重に検討する時間があるかどうかについて考えており、多くの場合、リファクタリングしないことを決定します。

+0

OPは、プロジェクトがTDDを使用して最初から書かれたものかどうかを明示的には言及していませんが(疑問はそうではないかもしれませんが)。しかし、単体テストのカバレッジの良いプロジェクトは、リファクタリングで導入されたバグの危険にさらされますが、そのリスクは適切なテストによって大幅に軽減されます。 – JeffH

+0

確かに、義務においても良いテストを維持しています。それは全く無料ではありません。 – sharptooth

2

2つのことに依存しますが、IMO - 複製のサイズ(何行含まれていますか)と複製のローカリティ - 文脈の点ではどれくらい近いかです。

同じクラスのいくつかのメソッドで重複したコードがある場合は、別々のメソッドに1行の重複を抽出することも考えられます(問題の行は簡単に識別でき、分離しやすく、のコード)。

また、プロジェクトのある部分にいくつかのコードがあり、(ほとんど)無関係な領域にほぼ同じコードがあれば、それを除外します。将来の相違の範囲が高いようです。 ...

2

が必要な場合は、にリファクタリングすることが重要です。上記の例では、同じ条件の3つの異なるwhileループがある場合、将来的には異なる条件が必要かもしれませんが、すでにリファクタリングしている場合は潜在的なエラー状況が導入されています。

これは3回同じ状況でOKですが、同じ条件で10回は明らかなリファクタリングですが、ティッピングポイントはどこですか?

1

私は個人的にはかなりリファクタリングを積極的に行っています。あなたのコードを定期的に整理すれば、小さくて単純なリファクタリングをする必要があると私は信じています。あなたがしばらくそれを残すと、それは非常に乱雑になり、維持するのが難しくなります。

具体的なケースでは、条件が合理的なビジネス上の意味を持つ場合は、私は間違いなくリファクタリングします。コードを読みやすくするためです。しかし、これが技術的なものであっても、リファクタリングは機能や財産を抽出するだけの問題であると考えています。

理想的には、リファクタリングが正しいことを確認する単体テストが必要です。そのため、実際にこの応答を書くよりも、数分かかることがあります。

1

一般的な経験則は、Martin Fowlerによって発表されたRule of Threeです()。このルールでは、基本的に同じ2つのものは残っていると言われていますが、3分の1を追加するとそれらをリファクタリングする必要があります。

リファクタリングは、言い換えれば将来の変更を簡単にするだけでなく、可読性を向上させ、意図をより明確にすることができます。

関連する問題