Aggiornamento - Si prega di consultare il commento qui sotto che collega a un true explanation of protected
/private
in Ruby. Quello era un profondo pregiudizio lasciato dai miei giorni in Java, anzi. L'unica parte importante della mia risposta è che i metodi di controllo che non sono azioni non dovrebbero essere public
(o almeno i percorsi dovrebbero proteggerli).
L'ereditarietà tabella singola è un perfetto esempio di quando protected
è utile nel livello modello, in quanto è uno degli usi più comuni dell'ereditarietà.
nel livello di controllo, metodi di supporto definiti su ApplicationController
deve essere contrassegnato come protected
- se fossero private
altri controller non sarebbero in grado di accedervi, ma se sono public
Rails li tratteranno come azioni.
Personalmente, trovo che uso l'ereditarietà di classe più di molti dei miei amici e colleghi, anche nelle applicazioni Rails. Perché lo uso spesso (e uscendo dai miei giorni Java), preferisco lo protected
per tutti i metodi di supporto per dare libertà a chiunque (di solito io stesso) che vuole estendere la classe - a meno che non sia davvero imbarazzante per uno, allora Lo contrassegno private
. :)
fonte
2009-05-22 20:46:45
Questo ha molto senso. (Non sono sicuro di quale sia lo STI). –
"I metodi helper definiti su ApplicationController devono essere contrassegnati come protetti - se fossero privati gli altri controllori non sarebbero in grado di accedervi" - fyi, questo non è corretto. Vedi esempio qui: http://pastie.org/842898. Protetto/privato in Ruby riguarda 'sé' e destinatari, non eredità. "Nota che, a differenza di linguaggi come Java, l'ereditarietà non ha assolutamente alcun ruolo nel determinare la visibilità del metodo in Ruby." - http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby –
Grazie, Jordan. Hai ragione. Ho aggiunto una piccola nota. –