1つずつリファクタリング技法まとめ
個人的に簡単かつ取り入れ易いと思うものから
目的
すぐ引き出せるようにする
基本作業サイクル
- システムを動かして仕様を精査
- テストメソッドを作成
- テストの失敗を確認
- テストの成功を確認
- 小さい変更、随時テスト実行(パターン追加失敗確認->成功確認)
- 最後テスト実行
- 最後動作確認
引数オブジェクトの導入(Introduce Parameter Object)とは
複数ある引数を1つのオブジェクトにまとめること
引数の情報は変えずに数を減らすこと
ポイント
- 複数の引数に関連性があることが自明、または同じ組み合わせで渡されている引数がある時に引数の情報をイミュータブルなクラスとして作成
- 既存のメソッドにオブジェクト化した引数を追加し、少しずつ引数を差し替えて検証する
- 既存の引数を削除できたら引数オブジェクトのクラスに債務のあるメソッドを移動する
例
class Doraemon
attr_reader :calorie
def eat(bean_paste, castella)
@calorie = bean_paste + castella
end
def large
@calorie += 500
end
end
↓
class Dorayaki
attr_reader :calorie, :bean_paste, :castella
def initialize(bean_paste, castella)
@bean_paste = bean_paste
@castella = castella
end
def large
@calorie = @bean_paste + @castella + 500
end
end
class Doraemon
def eat(dorayaki)
dorayaki.bean_paste + dorayaki.castella
end
end
書籍情報
Jay Fields (著), Shane Harvie (著), Martin Fowler (著), Kent Beck (著),
長尾 高弘(訳), リファクタリング:Rubyエディション
https://amzn.to/2VlyWML
雑感
何の組み合わせによる技法かを認識するためにも少しずつ行う