ПРЕДУПРЕЖДЕНИЕ : Мнения впереди!
Если вам нужен только один объект, просто используйте один объект:
class << (Foo = Object.new)
# method definitions go here...
end
Foo.do_something!
Модули для обмена поведением между объектами. Классы - это фабрики для объектов. Обратите внимание на множественное число: если у вас есть только один объект, вам не нужны ни средство для совместного использования поведения, ни фабрика для производства нескольких копий.
То, считается ли это идиоматическим, Ruby во многом зависит от того, о каком "Ruby" вы говорите: вы говорите о Ruby, используемом программистами Rails, Ruby, используемом программистами Smalltalk, Ruby, используемом программистами Java, или Ruby используется программистами Ruby? Существуют значительные различия в стилях, используемых этими различными сообществами.
Например, старые Рубиисты, такие как Дэвид Алан Блэк, обычно начинают всегда только с объектов и одноэлементных методов. Только если они позже обнаружат дублированное поведение между объектами, они извлекут это поведение в миксин и extend
объекты с ним. (Обратите внимание, что на данном этапе еще нет классов!)
Классы создаются, опять же, только путем рефакторинга, а не с помощью предварительного проектирования, когда и только , когда между объектами имеется дублированная структура.