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

时间:2012-06-14 13:47:22

标签: 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

这是干嘛:

%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

哪一个更好,为什么?

4 个答案:

答案 0 :(得分:3)

纯粹因为OP似乎喜欢我的评论,我会把它作为答案:

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

答案 1 :(得分:2)

既不(遗憾)。

def vote_count(item,vtype)
  return false unless can? :vote, item
  vote item, vtype
end
祝你好运

答案 2 :(得分:1)

恕我直言,在这种情况下,可读性胜过干。它扫描速度很快,很容易弄清楚。话虽如此,如果你开始添加投票类型,第二种方法可能会更灵活。 YMMV。

答案 3 :(得分:0)

两个

我和Anil在一起;只是传递一种类型 - 元编程,这是一个第一手段令人讨厌。

那就是说,我方便方法的粉丝 - 但他们应该用类型调用泛型方法。

这使得生成的方法简洁 - 真正的工作在泛型方法中完成,但API用户仍然获得相同的便捷方法。

相关问题