Каков предпочтительный способ (лучший стиль) называть пространство имен в Ruby? Единственное или множественное число?

Какие для вас плюсы и минусы использования:

FooLib::Plugins
FooLib::Plugins::Bar

vs.

FooLib::Plugin
FooLib::Plugin::Bar

соглашения об именах? А что бы вы использовали или что используете? Что чаще всего используется в сообществе?

27
задан Larry K 15 February 2012 в 18:02
поделиться

2 ответа

Используйте:

module FooLib end
module FooLib::Plugins end
class  FooLib::Plugins::Plugin; end #the base for plugins
class  FooLib::Plugins::Bar < FooLib::Plugins::Plugin; end
class  FooLib::Plugins::Bar2 < FooLib::Plugins::Plugin; end

или другими словами:

module FooLib
  module Plugins
    class Plugin; end #the base for plugins
    class Bar < Plugin; end
    class Bar2 < Plugin; end
  end
end

Также упорядочите файлы следующим образом:

- foo_lib/
  - plugins/
    - plugin.rb
    - bar.rb
    - bar2.rb

Это как это делает Rails (так что это путь Rails). То есть посмотрите на пространство имен Ассоциаций и класс Ассоциаций :: Ассоциация , от которого все классы образуют пространство имен Ассоциаций (т. е. Ассоциации :: SingularAssociation ).

21
ответ дан 28 November 2019 в 05:24
поделиться

Как правило, я склоняюсь к следующему подходу:

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 можно найти гораздо меньше экземпляров классов в качестве пространств имен, чем модулей. Единственный раз, когда я действительно вижу классы, используемые в качестве пространства имен для другого класса, это когда назначение указанного класса является частным по отношению к классу пространства имен и не используется внешне.

1
ответ дан 28 November 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: