L'unica differenza tra i due approcci è che il secondo getterà uninitialized constant Object::SomeNamespace
se lo spazio dei nomi non è stato precedentemente dichiarato.
Se dichiarato in un singolo file, opterei per il primo perché non è necessario ripetere SomeNamespace
.
Quando si utilizzano più file Io uso anche il secondo, per evitare di incorrere nel seguente problema:
# in a.rb
require 'b'
module SomeNamespace
def self.animal
Animal.new
end
end
# in b.rb
class SomeNamespace::Animal
end
# irb
require 'a' # explodes with the uninitialized constant error
Questo esempio può essere forzato, ma è facile da innescare, se la vostra base di codice è un po ' più grande. Di solito uso il modo esplicito (il tuo primo) per evitarlo.
Una cosa che può essere utile quando si utilizza il secondo modulo è che rileverà errori di battitura nello spazio dei nomi.
Non sembra esserci un modo consolidato per creare spazi dei nomi, Devise ad esempio unisce entrambi gli approcci: first one, second one.
fonte
2011-10-19 13:14:28