パンくず
リファクタリング-プログラマーの体質改善テクニック
データの再編
オブジェクトによるデータ値の置き換え
内容
リファクタリング名
オブジェクトによるデータ値の置き換え
適用ケース要約
追加のデータや振る舞いが必要なデータ項目がある
適用内容要約
そのデータ項目をオブジェクトに変える
適用詳細
単純なデータ項目だと判断していた要素が、システムの運用と共に肥大化・複雑化することがあります。
その場合、該当データ(群)をオブジェクトとして抽出します。
サンプル
TODOを取り扱うTODOマネージャー機能を実装します。
リファクタリング前は、TODOの各項目をただのハッシュとして扱っていました。
これをオブジェクトに置換します。
サンプルコード
▼リファクタリング前
# encoding: Shift_JIS class TodoManager attr_accessor:todo_map # TODOはTODO名、見積時間(30分=1)、実作業時間、完了フラグで構成される def add_todo(todo_name,estimate,actual_results,is_finish) @todo_map={:todo_name=>todo_name,:estimate=>estimate,:actual_results=>actual_results,:is_finish=>is_finish} end def display_todo() @todo_map.each {|key,value| puts "#{key}:#{value}" } end end todo_manager = TodoManager.new todo_manager.add_todo("viの学習 入門","2","0時間38分03秒","true") todo_manager.display_todo puts "--------------------------------------------------------------" todo_manager2 = TodoManager.new todo_manager2.add_todo("viの学習 中級","8","","false") todo_manager2.display_todo
▼リファクタリング後
# encoding: Shift_JIS class TodoManager attr_accessor:todo # TODOはTODO名、見積時間(30分=1)、実作業時間、完了フラグで構成される def add_todo(todo_name,estimate,actual_results,is_finish) @todo=Todo.new(todo_name,estimate,actual_results,is_finish) end def display_todo() @todo.display_todo end end class Todo attr_accessor:todo_name,:estimate,:actual_results,:is_finish def initialize(todo_name,estimate,actual_results,is_finish) @todo_name=todo_name @estimate=estimate @actual_results=actual_results @is_finish=is_finish end def display_todo() todo_map={:todo_name=>@todo_name,:estimate=>@estimate,:actual_results=>@actual_results,:is_finish=>@is_finish} todo_map.each {|key,value| puts "#{key}:#{value}" } end end todo_manager = TodoManager.new todo_manager.add_todo("viの学習 入門","2","0時間38分03秒","true") todo_manager.display_todo puts "--------------------------------------------------------------" todo_manager2 = TodoManager.new todo_manager2.add_todo("viの学習 中級","8","","false") todo_manager2.display_todo
▼出力結果(共通)
todo_name:viの学習 入門 estimate:2 actual_results:0時間38分03秒 is_finish:true -------------------------------------------------------------- todo_name:viの学習 中級 estimate:8 actual_results: is_finish:false