Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

書籍 リファクタリング−プログラマーの体質改善 | メソッド呼び出しの単純化 | setメソッドの削除

内容

適用ケース要約

フィールドの値が生成時に設定され、決して変更されない

適用内容要約

そのフィールドに対するすべてのsetメソッドを削除する

適用詳細

必要最低限なフィールドのみを公開することによりカプセル化を行う。
これにより、意図しない値の変更などを防ぐことが出来る。

サンプル

姓名を管理するクラスを実装します。
ここでは姓名は一度設定したら変わらない情報であるとします。

サンプルコード

リファクタリング

# encoding: Shift_JIS

class Person
  attr_accessor:family_name,:first_name
  def initialize(family_name,first_name)
    @family_name=family_name
    @first_name=first_name
  end
end

matsumoto=Person.new("matsumoto","yukihiro")
matsumoto.family_name="matz"
matsumoto.first_name="hiroyuki"
puts matsumoto.family_name
puts matsumoto.first_name

出力(リファクタリング前)

matz
hiroyuki

リファクタリング

# encoding: Shift_JIS

class Person
  attr_reader:family_name,:first_name
  def initialize(family_name,first_name)
    @family_name=family_name
    @first_name=first_name
  end
end

matsumoto=Person.new("matsumoto","yukihiro")
matsumoto.family_name="matz"
matsumoto.first_name="hiroyuki"
puts matsumoto.family_name
puts matsumoto.first_name

出力(リファクタリング後)

・・・・ (NoMethodError)