空飛ぶたまごエンジニア

韓国進出を夢見るエンジニアのブログ

10月1日の日記

今日の学び

リファクタリング: Rubyエディション

第7章は オブジェクト間でのメンバの移動 をテーマに、リファクタリングのテクニックがまとめられている。

全部で6つのテクニックが紹介されている。

  • Move Method
  • Move Field
  • Extract Class
  • Inline Class
  • Hide Delegate
  • Remove Middle Man

Move Method

要約

メソッドが、他クラスの機能を多く使っていたり、他クラスに何度も利用されたりしていたら、最もよく使われているクラスにメソッドを移動する

# リファクタリング前
class Employee
  def base_salary
    if @employee_type.manager?
      return 200000
    else
      return 100000
    end
  end
end

# リファクタリング後
class EmployeeType
  def base_salary
    if manager?
      return 200000
    else
      return 100000
    end
  end
end

説明

  • メソッドは最もよく使われているクラスに定義する
    • 他クラスを参照しなくて済むので、コードが少なくなる
    • 他クラスの実装を見に行かなくてよくなる

備考

  • リファクタリングをしたら、必ずテストを実行する
    • メソッドを移動したときにテストを実行
    • 上記に伴うメソッド呼び出し箇所の書き換えでもテストを実行
    • Rubyコンパイラ言語ではないので、テストが命綱になる

所感

メソッドは、最もよく使われているクラスに定義するということを、恥かしながら最近知った。

しっかり考えればわかることではあるが、他クラスのオブジェクトを参照しなくてもよくなるし、他クラスの実装も見に行ったりしなくてよくなる。結果的に効率よくコードがかけるようになるなと実感した。

また Rubyインタープリタ言語であり、リファクタリング後にコンパイルによってミスをキャッチできない。だからこそ、テストが重要であるということに深く納得した。