10

只是想知道,我们什么时候应该真正使用privateprotected用于模型中的某些方法?

有时我会不厌其烦地将我的方法分组到privatenor中protected。我只是保持原样。但我知道这一定是一个不好的做法,否则这两个分组将不会在编程中创建。

谢谢。

4

3 回答 3

15
  • 如果你打算在外部调用一个方法record.method(),那么“public”
  • 如果仅在内部使用self.method(),则为“私有”
  • 如果您打算在内部使用它,但也在后代中使用它self.method() # in subclass,那么“受保护”
于 2012-01-04T16:44:52.410 回答
2

我会发表我的意见,也许我会对此感到兴奋,但我不关心 Ruby 中的 protected 或 private。实际情况是,Ruby 把你当成人一样对待,如果你想从类外运行私有方法,你可以(有办法 。您可以在类外运行受保护的方法。你甚至可以重新分配常量......基本上你可以做任何你喜欢的事情。

这就是我喜欢它的原因,这是你的责任。我的感觉是,要将某物标记为受保护或私有,您需要做两件事:

  1. 表明您认为消费者不需要它。
  2. 其次猜测别人需要什么。

此外,您使测试变得更加困难,因为它可能是测试私有方法的真正痛苦(请参阅What's the best way to unit test protected & private methods in Ruby?了解解决方法)

由于最后两个原因,我不理会它们。如果你真的想在你的类/方法和消费者(无论是代码还是开发人员)之间设置某种屏障,那么还有其他更有效的方法(代理、混淆、加密、密码保护方法等)。否则,为什么不让他们访问您使用的相同工具?

于 2012-01-04T18:53:47.013 回答
0

我不知道 Ruby 是一个特例,但我认为答案也与其他语言相同,所以这里是:

私有方法只能由同一类的成员访问,而受保护的方法也可用于扩展声明该方法的基类的类的成员。

于 2012-01-04T16:42:54.640 回答