14

忏悔:我的方法只使用私有公共可见性!

我有一种感觉,这是一件坏事。但在 Rails 中,这似乎不是一个问题。

有没有人在 Rails 中有一个例子,不使用受保护的可见性是一个大错误?

4

2 回答 2

9

更新- 请参阅下面的评论,该评论链接到/在 Ruby中的真实解释protectedprivate。这确实是我在 Java 时代留下的根深蒂固的偏见。我的答案剩下的唯一重要部分是,不是动作的控制器方法不应该是public(或者至少你的路由应该保护它们)。

单表继承是protected模型层何时有用的完美示例,因为它是那里最常见的继承用途之一。

在控制器层中,定义的辅助方法ApplicationController应该被标记为protected——如果它们是private其他控制器将无法访问它们,但如果它们是publicRails 将它们视为操作。

就我个人而言,我发现我比我的许多朋友和同事更多地使用类继承,即使在 Rails 应用程序中也是如此。因为我经常使用它(并且从我的 Java 时代出来),所以我赞成protected所有帮助方法为任何想要扩展类的人(通常是我自己)提供自由——除非我真的对一个类感到尴尬,然后我标记它private。:)

于 2009-05-22T20:46:45.877 回答
0

我有 SingleTableInheritance

class Person < AR::base class Teacher < Person cals Student < Person

我使用受保护的方法来实现学生和教师通用的私有方法:

class Person < AR::base
  def self.find(*args)
    reject_leaves(super(*args))
  end
protected
  def self.reject_leaves(target) #like a private in Teacher and Student
    case target
      when Array target.select{|t| reject_leaves(t)}
      when Person (target.leave_date < Date.today ? target : nil)
      else target
    end
  end
end

免责声明:有一些插件,如 act-as-paranoid 和其他插件来实现我在这里使用的功能来向您展示案例,但我有一个更复杂的环境,我在此处进行了简化以达到您的目的。

于 2009-05-22T07:24:16.440 回答