Pergunta

Confissão: eu só uso privada e público visibilidade para meus métodos

Eu tenho um sentimento que este é uma coisa ruim. Mas no Rails ele simplesmente não parece surgir como um problema.

Alguém tem um exemplo em Rails onde seria um grande erro não usar protegido visibilidade?

Foi útil?

Solução

Atualizar - Por favor, veja o comentário abaixo que vincula a um verdadeira explicação para protected / private em ruby ??. Isso era um preconceito profundamente arraigado que sobraram dos meus tempos de Java, na verdade. A única parte importante da esquerda para a minha resposta é que os métodos do controlador que não são ações não devem ser public (ou pelo menos suas rotas deve protegê-los).

Herança de Tabela Única é um exemplo perfeito de quando protected é útil no modelo de camadas, como é um dos usos mais comuns de herança lá.

No nível controlador, métodos auxiliares definidos no ApplicationController deve ser marcado como protected -. Se fossem private os outros controladores não seria capaz de acessá-los, mas se eles são Rails public vai tratá-los como ações

Pessoalmente, acho que a herança de classe I uso mais do que muitos dos meus amigos e colegas de trabalho, mesmo em aplicações Rails. Porque eu usá-lo muitas vezes (e saindo dos meus dias de Java), sou a favor protected para todos os métodos auxiliares para dar liberdade a ninguém (normalmente eu) que quer estender a classe - a menos que eu estou realmente envergonhado com um, então eu marcá-lo private. :)

Outras dicas

Eu tenho SingleTableInheritance

class Person

E eu usar os métodos protegidos para implementar um método particular que é comum para Estudantes e Professores:

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

Disclaimer: Existem plugins como ato-as-paranóico e outros para implementar o recurso que eu uso aqui para mostrar-lhe o caso, mas eu tenho uma paisagem mais complexa, que eu simplificado aqui para chegar ao seu ponto

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top