Модули Ruby, использующие какой-либо общий метод: куда поместить этот метод?

#ruby

#ruby

Вопрос:

Учитывая некоторый класс Uploader, у меня есть три модуля, включенных в него.

У каждого из них есть свое отличительное применение, и именно поэтому я разделил их на три модуля. Но, как выясняется, есть один метод, который нужен всем трем модулям.

Итак, для меня пока очевидно, что должен быть способ получше, чем определение этого метода в каждом из этих трех модулей. Должен ли я создать четвертый модуль и поместить в него этот метод, и чтобы эти исходные три модуля включали этот четвертый модуль? Или есть способ получше?

Комментарии:

1. Вы могли бы написать универсальный класс uploader с общими методами, а затем создавать подклассы с определенной функциональностью. Если они должны быть модулями, то 4-й модуль, вероятно, является наиболее ПРОСТЫМ способом выполнить то, что вам требуется.

Ответ №1:

Да, похоже, у вас должен быть четвертый модуль. Но, похоже, вам действительно может понадобиться иерархия классов, а не независимые плоские модули. Примените тест ‘is a’ — можете ли вы сказать, что экземпляр UploaderA является загрузчиком? Если это так, у вас должно быть

 class Uploader
  include FourthModule  # with shared functionality for all uploaders
  # or just go ahead and put the shared functionality right in the Uploader class here.
end

class UploaderA < Uploader
end
  

Комментарии:

1. 1 за предложение классов. Это кажется наиболее подходящим решением для данного сценария.

2. @СПАСИБО Питеру и Глейзеру; исходя из того, что вы предложили в дальнейшем, должен ли я включать эти три модуля в класс UploaderA? И поскольку эти модули включены в подкласс UploaderA класса Uploader, который имеет этот важный общий метод, эти модули также «получат доступ к ues» к этому методу?