Композиция на основе модулей в Ruby

Одна из самых крутых особенностей Ruby заключается в том, что вы можете реализовать композицию несколькими способами. Например, помимо классической реализации, в которой вы выстраиваете цепочку вложенных объектов, в Ruby также можно реализовать композицию на основе модулей (примесей). Я понимаю, что для многих разработчиков этот способ не является приемлемым, но тот факт, что именно эта концепция лежит в основе архитектуры плагинов таких гемов, как Roda и Shrine, заставляет меня задуматься и посмотреть на это иначе. И так как include - это обычный метод, а объекты в Ruby обладают собственным классом (Eigenclass), можно пойти ещё дальше и включить модуль для конкретного объекта: ``` module Insurance def price = super + (@price * 0.1).to_i end need_insurance = true phone = Phone.new(1200) phone.singleton_class.include(Insurance) if need_insurance phone.price # => 1395 ``` А как вы реализуете композицию в своих проектах? Знаете ли вы другие подходы, с помощью которых можно её реализовать?

#Ruby #Composition #Module #Mixin #Plugin #Roda #Shrine

Композиция на основе модулей в Ruby | Сетка — социальная сеть от hh.ru