モデルのいくつかのメソッドに実際にprivate
またはprotected
を使用する必要があるのはいつですか?私たちはいつプライベートか保護された使用を検討すべきですか?
時々、私の方法をグループ化するのに悩まされることはありません。private
でもprotected
でもあります。私はそれをそのまま残す。しかし、私はそれが悪い習慣でなければならないことを知っています。さもなければ、これらの2つのグループはプログラミングで作成されません。
ありがとうございました。
モデルのいくつかのメソッドに実際にprivate
またはprotected
を使用する必要があるのはいつですか?私たちはいつプライベートか保護された使用を検討すべきですか?
時々、私の方法をグループ化するのに悩まされることはありません。private
でもprotected
でもあります。私はそれをそのまま残す。しかし、私はそれが悪い習慣でなければならないことを知っています。さもなければ、これらの2つのグループはプログラミングで作成されません。
ありがとうございました。
record.method()
、self.method()
を使用する場合は、self.method() # in subclass
は、その後、私は特殊なケースとしてのRubyを知らないが、私は答えはあまりにも他の言語の場合と同じになると仮定し、そうここにある:
プライベートメソッドのみのメンバーによってアクセスすることができますメソッドが宣言されている基底クラスを拡張しているクラスのメンバに対しては、protectedメソッドも使用できます。
私は私の意見をあげる「保護」、そして多分私はそれのために蹴りを取得しますが、私はと気にしない保護やRubyでのプライベート。現実には、あなたがクラスの外からプライベートメソッドを実行したい場合、Rubyはあなたを大人のように扱います(そこにはareways)。保護されたメソッドはクラス外で実行できます。あなたは定数を再割り当てすることもできます...基本的に好きなことをすることができます。
これが私が好きな理由です。あなたの責任です。あなたは消費者がそれを必要とは思わないことを示す
と「私はドン、これらの最後の二つの理由から
(それを回避する方法についてWhat's the best way to unit test protected & private methods in Ruby?を参照)、それはプライベートメソッドをテストする本当の痛みをすることができように加えて、あなたは、それが難しいテストするために作っています彼らと一緒にいらしてください。クラス/メソッドとコンシューマ(コードや開発者)との間に何らかの障壁が本当に必要だった場合は、他のより効果的な方法(プロキシ、難読化、暗号化、パスワード保護されたメソッドなど)があります。それ以外の場合は、使用したのと同じツールにアクセスできないのはなぜですか?
これはちょっと私には聞こえません。あなたの**第3ポイント**。サブクラスはスーパークラスの 'private'メソッドに内部的にアクセスできます。 'protected'メソッドは、同じクラスのオブジェクトを渡し、そのオブジェクトに対して保護されたメソッドを実行する機能を提供します。 – slindsey3000
http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby "保護されたメソッドは、受信者が「自己」と同じクラスのときはいつでも呼び出すことができます」 – clyfe