ruby-on-rails - 添加快捷方式还是遵循 ActiveRecord 语义?

标签 ruby-on-rails ruby refactoring associations naming

我和一个 friend 的又一次争论。考虑这段代码:

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?如果有必要,在关联扩展模块中。

但是我的 friend 认为最好使用快捷方式来创建“抽象点”,并且最好扩展此代码而不是使用回调或重载。

你怎么看?

附言明确一点,我讨厌“如果……会怎样”的方法:)

最佳答案

我完全同意不应添加这些方法。创建其他相关对象不是模型的工作。这是协会代理人的工作。我还要注意重写关联代理行为,因为由于代理的实现方式,您可能会看到一些奇怪的副作用。

关于ruby-on-rails - 添加快捷方式还是遵循 ActiveRecord 语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/526133/

相关文章:

ruby-on-rails - capybara Webkit 引发 InvalidResponseError "Unable to load URL"

perl - 如何识别和删除 Perl 中的冗余代码?

java - 记录分数的程序中的 if/else 语句

ruby-on-rails - 在 Rails 3 中以单个表单更新和创建多个记录

ruby-on-rails - Rails 请求伪造保护设置

ruby-on-rails - ruby 强度和用途

ruby - 在 Yosemite 10.10.3 上安装 Nokogiri

delphi - 如何在 Delphi 中获得 Visual Studio 的 "Create method stub"或 "Declare method"重构?

ruby-on-rails - 您的 bundle 需要彼此依赖的 gem,从而创建一个无限循环。请删除 gem

ruby-on-rails - 无法在 Rails 5.1 中保存嵌套表单