不同的操作取决于传递的参数:最佳模式可供选择

时间:2015-01-27 08:20:25

标签: ruby-on-rails ruby design-patterns

很多时候,我想要一个方法根据参数做一件事或另一件事。鉴于此课程:

class SendMailJob 
  def initialize(action_to_perform, user)
    self.send(action_to_perform.to_s, args)
  end

  private
  def feedback(user)
    puts "We send feedback email #{user}"
  end
  def any_help(user)
    puts "We send any_help email #{user}"
  end
end

取决于我想做什么,我用一个带有选项的符号来调用它:

SendMailJob.new(:feedback, @user)

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

我认为您的解决方案是合理的(正如 lx00st 的答案),但我想我可能会使用静态方法(类方法)而不是您发布的用例。

class SendMailJob
  def self.feedback(user)
    puts "We send feedback email #{user}"
  end

  def self.any_help(user)
    puts "We send feedback email #{user}"
  end
end

SendMailJob.feedback(@user)

答案 1 :(得分:0)

在更加oop-design-patern-way中,您应该将这些方法委托给子类

class SendMailJob
  def initialize(user)
    do_action user
  end
end 

class FeedbackJob < SendMailJob
  def do_action(user)
    puts "We send feedback email #{user}"
  end
end

但是,除了你想要分离一些逻辑之外,使用“预编程”的功能更方便“