自己カプセル化フィールド(Self Encapsulate Field)

◯ コードの臭い

フィールドに直接アクセスしているが、フィールドとの密結合が不都合になってきている。

リファクタリングする理由

サブクラスが情報の取得方法をメソッドでオーバーライドできるため、データの管理方法に柔軟性が生まれる。

◯ テストコード

# rspec

describe Item do
  let(:base_price){ 100 }
  let(:tax_rate){ 0.05 }
  let(:item){ Item.new(base_price, tax_rate) }

  describe 'raise_base_price_by(percent)' do
    let(:percent){ 0.1 }
    subject{ item.raise_base_price_by(percent) }
    it{ should == 100.1 }
  end

  describe 'total' do
    subject{ item.total }
    it{ should == 105 }
  end
end

※参考資料
 リファクタリング:Rubyエディション