パンくず
リファクタリング-プログラマーの体質改善テクニック
メソッド呼び出しの単純化
引数オブジェクトの導入
内容
リファクタリング名
引数オブジェクトの導入
適用ケース要約
本来まとめて扱うべき一覧の引数がある
適用内容要約
それらをオブジェクトに置き換える
適用詳細
ひとまとまりのデータとして意味を持つような引数を複数渡している場合、
それらの引数を新たなクラスにまとめてオブジェクトとして渡します。
引数が減り、可読性が上がると共にメソッドの移動などの前段階としても役に立ちます。
サンプル
姓名の2変数を利用するクラスがあったとします。
このクラスは日本語スタイルで姓名と出力する機能と
英語スタイルで名姓と出力する機能を持ちます。
サンプルコード
# encoding: Shift_JIS class NameManager def self.get_j_style_fullname(family_name,first_name) return "#{family_name} #{first_name}" end def self.get_e_style_fullname(family_name,first_name) return "#{first_name} #{family_name}" end end puts NameManager.get_j_style_fullname("matsumoto","yukihiro") puts NameManager.get_e_style_fullname("matsumoto","yukihiro")
# encoding: Shift_JIS class NameManager def self.get_j_style_fullname(person) return "#{person.family_name} #{person.first_name}" end def self.get_e_style_fullname(person) return "#{person.first_name} #{person.family_name}" end end 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") puts NameManager.get_j_style_fullname(matsumoto) puts NameManager.get_e_style_fullname(matsumoto)
出力(共通)
matsumoto yukihiro yukihiro matsumoto