Я хотел бы знать, когда лучше всего использовать миксин против прямого вызова метода.
Например, рассмотрим HTTParty. На одном из его примеров https://github.com/jnunemaker/httparty/blob/master/examples/basic.rb
Вы можете использовать HTTParty.get ('http://twitter.com/statuses/public_timeline.json') или создать класс, включающий HTTParty, а затем использовать его так же, как при вызове самого HTTParty.
Какая разница со мной, просто создавая что-то вроде этого:
class Partay
@base_uri = 'http://localhost:3000'
def self.post(endpoint, options)
HTTParty.post(@base_uri + endpoint, options)
end
end
против приведенного примера:
class Partay
include HTTParty
base_uri 'http://localhost:3000'
end
Правда, в таком тривиальном примере, возможно, использование include позволит сохранить больше символов, но я думаю, что в гораздо более сложном классе это не имеет большого значения.
Несколько уточняющих вопросов:
Будет ли это связано с аргументом «состав против комбинации»? Есть ли какой-либо лучший дизайн или архитектура в этом отношении? Должен ли я рассматривать миксины как своего рода наследование и использовать их как таковые (наследование, если оно представляет собой отношение, состав, если это отношение имеет отношение и т. Д.)? Стоит ли смешивать модуль только в том случае, если он предназначен для этого (поскольку в документах говорится, что он ожидает от вас определенных методов, например, Enumerable), или это просто хорошая практика? Означает ли использование mixin более тесную связь между модулем и моим классом (и относительно ли это хорошо или вообще плохо)?