パンくず
内容
適用ケース要約
フィールドの値が生成時に設定され、決して変更されない
適用内容要約
そのフィールドに対するすべての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)