LoginSignup
0
0

More than 5 years have passed since last update.

引数オブジェクトの導入(Introduce Parameter Object)

Last updated at Posted at 2019-03-17

image.png

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

雑感

何の組み合わせによる技法かを認識するためにも少しずつ行う

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0