kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

Factory Methodの利用(Ruby)

Rubyによるデザインパターンという本を借りたまま、持っているのですが、たまたま実務でFactory Methodパターンを利用するのに 良い機会が得られたので、本を思い出しながら設計/実装を進めました。周りを気にせず、実装に集中できるのは楽しいですね。

前提

Rails 5系

Ruby 2.3系

準備

class BaseService
  def test_method
  end
end

class UserService < BaseService
  def test_method
    puts "UserServiceから呼び出しています。"
  end 
end

class MemberService < BaseService
  def test_method
    puts "MemberServiceから呼び出しています。"
  end
end

呼出側

class SelectClass
  def initialize(option)
    @service = "#{option.capitalize}Service".constantize.new # Rails
  end

  def service_call
    @service.test_method
  end
end 

動作確認

SelectClass.new("user").test_method
-> puts "UserServiceから呼び出しています。"
SelectClass.new("member").test_method
-> puts "MemberServiceから呼び出しています。"

参考

const_get (Module) - Rubyリファレンス

constantize (ActiveSupport::Inflector) - APIdock