TOP

このエントリーをはてなブックマークに追加

Alternative Classes with Different Interfaces

Alternative Classes with Different Interfaces

兆候と症状
異なるメソッド名を有する2つのクラスが同じ機能を実装しているような状況。

問題の理由
一方のクラスを作成したプログラマは、機能的に同等のクラスが既に存在することをおそらく知らなかったでしょう。

対処
各クラスの共通部分をインターフェースとして抽出してみてください:

  • すべてのクラスでメソッド名が同じになるように「Rename Method」を適用します。
  • Move Method」、「Add Parameter」、および「Parameterize Method」により、メソッドのシグネチャ(メソッド名、引数の数、引数の型、引数の順番)と実装を同じにします。
  • クラスの機能の一部のみが重複している場合は、「Extract Superclass」を使ってみてください。この場合、既存のクラスはサブクラスになります。
  • 使用するリファクタリング方法を決定して実装した後、クラスの1つを削除できる場合があります。

効果

  • 不要な重複コードを排除することができます。
  • コードの可読性が上がり、理解しやすくなります。まったく同じ機能を実現するクラスが2つある理由を推測する必要がなくなります。


書籍としてはこの辺りが参考になると思います。

リファクタリング第2版
refactoring

レガシーコード改善ガイド
legacy_code