又是和我的一个朋友争吵。考虑这段代码:
class User < ActiveRecord::Base
has_many :groups
def in_group?(group)
groups.include?(group)
end
end
class Group < ActiveRecord::Base
has_many :members
def add_user(user)
members << user
end
end
我的观点是这些方法给代码增加了额外不必要的复杂性,而且很难猜到——比如为什么要#in_group?但不是#is_a_member_of?,或者为什么是#add_user 而不是#add_member,等等。基于我 4 年的 Rails 经验和 20 年的编程经验,我最好遵循 AR 语义并使用 User#groups.include?(group) 和 Group#members << user. 它们很容易猜到,如果我需要一些额外的功能,我可以对 has_many :members 使用回调并覆盖 User#groups.include? 如果有必要,在关联扩展模块中。
然而我的朋友认为最好使用快捷方式来创建“抽象点”,并且最好扩展此代码而不是使用回调或重载。
你怎么看?
PS为了清楚起见,我讨厌“如果”的方法:)