In generale, l'approccio tendo a prendere è:
module Foo
module Plugin
class Base; end
end
end
class Foo::Plugin::Bar < Foo::Plugin::Base; end
La classe Base
per i plugin è una convenzione trova in tutto il posto in RubyOnRails codice di base, così come molti altri. (Ad esempio ActiveRecord::Base
, ActionController::Base
, etc.)
sono d'accordo con l'approccio di @Matheus Moreira dove Foo::Plugin
viene utilizzato sia come classe base e lo spazio dei nomi per i plugin.
L'unica ragione funzionale per cui questo non dovrebbe essere fatto ha a che fare con la convenzione: nella comunità di Ruby si trovano molte meno istanze di classi come spazi dei nomi rispetto ai moduli. L'unica volta che vedo le classi utilizzate come spazio dei nomi per un'altra classe è quando lo scopo di detta classe è privato della classe namespace e non viene usato esternamente.
Osservando [Rotaie API] (http: //api.rubyonrails .org/classes/ActiveRecord.html), vedo che ci sono più nomi plurali sui moduli che nelle classi (vedi namespace, nella seconda metà della pagina). Tuttavia, non ho abbastanza esperienza con Rails per sapere quando usarne uno e quando usare l'altro. –