オブジェクト指向言語(たとえば、Javaに限定されません)では、発生の範囲に応じて重複コードをどのように修正しますか?(例えば)から始めます
- 同じクラス(スコープ)でExtractメソッドのリファクタリングを実行(修正)
- 同じ階層のクラス(スコープ)でメソッドの抽出とプルアップを実行(修正)
- ...
オブジェクト指向言語(たとえば、Javaに限定されません)では、発生の範囲に応じて重複コードをどのように修正しますか?(例えば)から始めます
回答:
最近、ボブおじさんの「クリーンコード」で私の質問に対する良い答えを見つけました。彼は3つのタイプの複製を区別しています
同一のコードの断片は、単一のメソッドで置き換える必要があります。したがって、修正はメソッドを抽出し、一般的な動作に委譲することです。
SthUtil
またはと呼ばれますSthLib
)。switch/case
およびのケースでは、if/else
常に同じ条件のセットがテストされます。
同様のアルゴリズムを実装するモジュール。クローン検出器がそれらを見つけることができないため、これらを見つけるのは最も困難です。
異なるバージョンのライブラリを扱うときにOdedが言及した有効な点
結局、私の質問に答えるのに最適な1つの文は、刺激によるものです。
オブジェクト指向言語で使用されるコード再利用メソッドはオブジェクトです。
一般に、重複するコードを1つの場所に統合し、元の複製サイトが統合された場所を呼び出していることを確認します。
あなたの例では、これはクラス内では抽出されたメソッドであり、クラスのセット内では基本クラス内のプルアップメソッドです。
コピーと貼り付けのコードでは、これは重複を削除し、すべてのユーザーが単一のコピーを(これがどのレベルであっても)使用できるようにすることです。
異なるバージョンのライブラリを扱う場合は、単一のバージョンに統合します(可能な場合)。
これは自由回答の質問だと思いますが、コードの状態にも依存します。つまり、コンテキストに応じて、重複するコードを少し許容できます。この問題には3のルールが適しています。
3つ のルール何かを初めて行うときは、それを行うだけです。2度目に似たようなことをすると、複製に失敗しますが、とにかく複製を行います。3回目に同様のことを行うと、リファクタリングします。
これはかなり議論の余地がありますが、この投稿では、重複するコードを許容するケースも考慮しています。