10

モデルのいくつかのメソッドでprivate実際にいつ使用する必要があるのでしょうか。protected

メソッドをグループ化するのに煩わされないことprivateもありprotectedます。そのままにしておきます。しかし、それは悪い習慣であるに違いないことを私は知っています。さもなければ、これらの2つのグループはプログラミングで作成されません。

ありがとう。

4

3 に答える 3

15
  • メソッドを外部で呼び出す場合は、、、record.method()「public」
  • 内部でのみ使用される場合はself.method()、、、「プライベート」
  • 内部だけでなく、子孫でも使用する場合は、、、self.method() # in subclass「保護」
于 2012-01-04T16:44:52.410 に答える
2

私は自分の意見を述べます、そして多分私はそれを蹴るでしょう、しかし私はRubyで保護されたまたはプライベートを気にしません。現実には、Rubyはあなたを大人のように扱います。クラスの外部からプライベートメソッドを実行したい場合は、それが可能です(方法 あります)。クラスの外部で保護されたメソッドを実行できます。定数を再割り当てすることもできます...基本的には、好きなことを行うことができます。

そしてそれが私がそれを好きな理由です、それはあなたの責任です。私の気持ちは、何かを保護またはプライベートとしてマークするには、2つのことをしているということです。

  1. 消費者がそれを必要としないと思うことを示します。
  2. 次に、他の誰かが何を必要としているかを推測します。

さらに、プライベートメソッドをテストするのは本当に苦痛である可能性があるため、テストが難しくなっています(回避方法については、Rubyで保護されたプライベートメソッドを単体テストするための最良の方法は何ですか?を参照してください)

これらの最後の2つの理由のために、私はそれらを気にしません。クラス/メソッドとコンシューマー(コードまたは開発者)の間に何らかの障壁が本当に必要な場合は、他のより効果的な方法(プロキシ、難読化、暗号化、パスワードで保護されたメソッドなど)があります。それ以外の場合は、使用したのと同じツールへのアクセスを提供してみませんか?

于 2012-01-04T18:53:47.013 に答える
0

特別な場合としてRubyを知りませんが、答えは他の言語でも同じだと思いますので、ここにあります。

プライベートメソッドには同じクラスのメンバーのみがアクセスできますが、プロテクトは、メソッドが宣言されている基本クラスを拡張するクラスのメンバーにも使用できます。

于 2012-01-04T16:42:54.640 に答える