Код, который вы предложили, должен работать нормально. Вы можете пойти с этим.
Однако, в зависимости от контекста, существует риск того, что эта стратегия может иметь непредвиденные последствия - то есть, что произойдет, если вы случайно выполните класс monkey-patching, но ожидаете, что исходное поведение будетpreserved?
Более надежный подход - использовать внедрение зависимостей . Делая это, вы можете переопределить поведение с классическим наследованием (или даже передав совершенно новый объект!). Например, что-то вроде:
class MainService
def perform(secondary_service: SecondaryService.new)
secondary_service.perform
end
end
class ModifiedSecondaryService < SecondaryService
def some_method
puts 'anything'
end
end
Теперь, для вашего одноразового рейка, вы можете запустить:
PrimaryService.new.perform(secondary_service: ModifiedSecondaryService.new)