Ho una domanda in due parti
La migliore pratica
- Ho un algoritmo che esegue alcune operazioni su una struttura dati utilizzando l'interfaccia pubblica
- Attualmente è un modulo con numerosi metodi statici, tutti privati tranne l'unico metodo di interfaccia pubblica.
- C'è una variabile di istanza che deve essere condivisa tra tutti i metodi.
Queste sono le opzioni che posso vedere, qual è la migliore ?:
- Modulo con metodi statici ('module' in ruby)
- Classe con metodi statici
- Modulo Mixin per l'inclusione nella struttura dati
- Rifattorizza la parte dell'algoritmo che modifica quella struttura dati (molto piccola) e rendila un mixin che chiama i metodi statici del modulo algoritmo
Parte tecnica
C'è un modo per creare un metodo Modulo privato ?
module Thing
def self.pub; puts "Public method"; end
private
def self.priv; puts "Private method"; end
end
Il private
là dentro non sembra avere alcun effetto , posso ancora chiamare Thing.priv
senza alcun problema.
private
interessa solo i metodi di istanza, non i metodi di classe. usa private_class_method
invece:module Thing; def self.pub; end; private_class_method :pub; end