パンくず
リファクタリング-プログラマーの体質改善テクニック
データの再編成
参照から値への変更
内容
リファクタリング名
参照から値への変更
適用ケース要約
小さくて不変でコントロールが煩わしい参照オブジェクトを持っている。
適用内容要約
そのオブジェクトを値オブジェクトに変える。
適用詳細
参照として実装していたが、オブジェクトとして扱う手間のほうが
コストが大きい場合や、分散処理向けに値オブジェクトで扱いたい時に
この方法を適用します。
手順は値から参照への変更の逆になります。
サンプル
ビックリマンシールを表すクラスからデータを取得することを想定します。
シールを表すBikkuriManクラスはシールの名前とIDを保持します。
はじめはシールの情報を参照で返却していましたが、
値で取得するようにリファクタリングします。
サンプルコード
class BikkuriMan attr_accessor:id,name def initialize(id,name) @id=id @name=name end def display_card_info() puts "#{@id }:#{@name}" end end class BikkuriManFactory @@card_map={5=>BikkuriMan.new(5,"火消し助六"),8=>BikkuriMan.new(8,"一発助役")} def self.get_card(id) return @@card_map[id] end end bikkuri_man1=BikkuriManFactory.get_card 5 bikkuri_man1.display_card_info bikkuri_man2=BikkuriManFactory.get_card 8 bikkuri_man2.display_card_info
# encoding: Shift_JIS class BikkuriMan attr_accessor:id,name def initialize(id,name) @id=id @name=name end def display_card_info() puts "#{@id }:#{@name}" end end bikkuri_man1=BikkuriMan.new(5,"火消し助六") bikkuri_man1.display_card_info bikkuri_man2=BikkuriMan.new(8,"一発助役") bikkuri_man2.display_card_info
出力(共通)
5:火消し助六 8:一発助役