#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» к этому методу?