Как правило, я склоняюсь к следующему подходу:
module Foo
module Plugin
class Base; end
end
end
class Foo::Plugin::Bar < Foo::Plugin::Base; end
Класс Base
для плагинов - это соглашение, встречающееся повсеместно в кодовой базе RubyOnRails, а также во многих других.(например, ActiveRecord::Base
, ActionController::Base
и т. д.)
Я не согласен с подходом @Matheus Moreira, где Foo::Plugin
используется как базовый класс и пространство имен для плагинов.
единственная функциональная причина, по которой этого не следует делать, связана с соглашением - в сообществе Ruby можно найти гораздо меньше экземпляров классов в качестве пространств имен, чем модулей.Единственный раз, когда я действительно вижу классы, используемые в качестве пространства имен для другого класса, это когда назначение указанного класса является частным по отношению к классу пространства имен и не используется внешне.