根据传递的参数执行不同的操作:选择最佳模式
Different actions depending on passed arguments: best pattern to choose
很多时候,我想要一个方法来根据参数做一件事或另一件事。鉴于此 class:
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)
有更好的方法吗?
以更 oop-design-patern 的方式,您应该将这些方法委托给子类
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
但是借助元编程的强大功能,使用 "send" 会更方便,除非您想分离一些逻辑
我认为您的解决方案是合理的(lx00st 的回答也是如此),但我认为我可能会使用静态方法(class 方法)而不是使用你发布的案例。
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)
很多时候,我想要一个方法来根据参数做一件事或另一件事。鉴于此 class:
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)
有更好的方法吗?
以更 oop-design-patern 的方式,您应该将这些方法委托给子类
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
但是借助元编程的强大功能,使用 "send" 会更方便,除非您想分离一些逻辑
我认为您的解决方案是合理的(lx00st 的回答也是如此),但我认为我可能会使用静态方法(class 方法)而不是使用你发布的案例。
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)