我们应该何时考虑使用私人或受保护?

时间:2012-01-04 16:39:04

标签: ruby-on-rails ruby access-specifier

只是想知道,我们什么时候才能将privateprotected用于模型中的某些方法?

有时候我不能不在privateprotected中对我的方法进行分组。我只是保持原样。但我知道这一定是一种不好的做法,否则这两个分组将不会在编程中创建。

感谢。

3 个答案:

答案 0 :(得分:15)

  • 如果您打算在外部调用方法,record.method(),则“公共”
  • 如果它仅在内部使用,self.method(),则“私人”
  • 如果您打算在内部使用它,也可以在后代self.method() # in subclass使用它,那么“受保护”

答案 1 :(得分:2)

我会给出意见,也许我会为此付出代价,但我不打扰Ruby中的protected或private。实际情况是,Ruby会像对待成年人一样对待你,如果你想从课外运行私人方法,你可以(are ways )。您可以在类外部运行受保护的方法。你甚至可以重新分配常数......基本上你可以做任何你喜欢的事。

这就是我喜欢它的原因,这是你的责任。我的感觉是,要将某些内容标记为受保护或私密,您正在做两件事:

  1. 指示 您不认为消费者需要它。
  2. 第二次猜测别人需要什么。
  3. 此外,你使测试更难,因为它可能是一个真正的痛苦测试私人方法(请参阅What's the best way to unit test protected & private methods in Ruby?了解它的方法)

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

答案 2 :(得分:0)

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

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