Tbpgr Blog

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

書籍 Refactoring to Patterns | Accumulation| Move Accumulation to Collecting Parameter

パンくず

書籍 Refactoring to Patterns
Accumulation
Move Accumulation to Collecting Parameter

概要

Move Accumulation to Collecting Parameterについて

使用する場面

一つのローカル変数に対する変更をまとめて行なっている一つのメソッドがあるなら、
このパターンで分割する。

対応方法

Collecting Parameterでリファクタリングする。

利点と欠点

利点

・単位を小さく、シンプルに、読み易くする。
・コードを早く読める

欠点

・なし

サンプル

SQL文を取得する機能を実装します。

リファクタリング
# encoding: Windows-31J
require "pp"

class SqlCreator
  attr_accessor:sql
  def getSql(columns, table, condition)
    sql = "select "
    columns.each{|column|
      sql << "#{column.column_name},"
    }
    sql.chop!
    sql << " from #{table}"
    sql << " where key='#{condition}'"
  end
end

class Column
  attr_accessor:column_name
  def initialize(column_name)
    @column_name = column_name
  end
end

columns = [Column.new("column1"), Column.new("column2"), Column.new("column3")]
puts SqlCreator.new.getSql(columns,"table", "key")
リファクタリング
# encoding: Windows-31J
require "pp"

class SqlCreator
  attr_accessor:sql
  def getSql(columns, table, condition)
    getSelect(columns)
    getFrom(table)
    getWhere(condition)
    return @sql
  end
  
  private
  def getSelect(columns)
    @sql = "select "
    columns.each{|column|
      @sql << "#{column.column_name},"
    }
    @sql.chop!
  end
  def getFrom(table);@sql << " from #{table}";end
  def getWhere(condition);@sql << " where key='#{condition}'";end
end

class Column
  attr_accessor:column_name
  def initialize(column_name)
    @column_name = column_name
  end
end

columns = [Column.new("column1"), Column.new("column2"), Column.new("column3")]
puts SqlCreator.new.getSql(columns,"table", "key")
出力内容
select column1,column2,column3 from table where key='key'