什么是Rails方式?(可读性与干燥性)

enR*_*Rai 9 ruby-on-rails

我有一个用户模型,它有投票方法.我想写代理方法进行投票.

这是可读的方式:

def vote_up item
  return false unless can? :vote, item
  vote item, :up
end

def vote_down item
  return false unless can? :vote, item
  vote item, :down
end
Run Code Online (Sandbox Code Playgroud)

这是干的方式:

%w(up down).each do |vtype|
  define_method "vote_#{vtype}" do |item|
    return false unless can? :vote, item
    vote item, vtype.to_sym
  end
end
Run Code Online (Sandbox Code Playgroud)

哪一个更好,为什么?

MrD*_*anA 3

纯粹是因为OP似乎喜欢我的评论,我将其作为答案:

就我个人而言,考虑到您这里只有 2 个方法,并且您不太可能添加更多方法(vote_sideways? vote_diagonally?),我只会采用可读的方式。如果您可能有更多,更多,我会采用 DRY 方式(因为它变得容易扩展)并带有可读的注释来向其他开发人员(或稍后向您自己解释!)。