http://fabiokung.com/2010/05/06/ruby-and-dependency-injection-in-a-dynamic-world/: это еще одна, гораздо менее мнительная статья, чем статья Джеймса Бака. Суть в том, что вам не нужно внедрение зависимостей, потому что ruby предоставляет множество хороших альтернатив, которые работают так же хорошо и которые на самом деле не существуют в мире Java.
Одна из этих альтернатив - миксин, чего у Java нет, а другая - возможность переопределить / переопределить что-либо в языке. Другие функции включают в себя динамическую типизацию, когда в основном вы можете отправить любое сообщение любому объекту, и если это обеспечивает реализацию этого сообщения, все просто работает. Все эти вещи работают вместе, чтобы устранить большую часть потребности в структуре DI. Шаблон проектирования как таковой все еще действует в Ruby, и иногда имеет смысл использовать его.
Еще один момент, касающийся DI, который вышеупомянутый Алексей Петрушин также делает, заключается в том, что внедрение зависимостей - это, прежде всего, шаблон проектирования, а инструментарий является второстепенным и главным образом позволяет избавиться от утомительности некоторых вещей в Java. В ruby вы можете легко эмулировать большую часть того, что весна или хитрость делают для вас в Java. Таким образом, полнофункциональная структура внедрения зависимостей в Ruby по существу избыточна.
При этом иногда бывает полезно иметь DI-фреймворк, так как в конечном итоге это может отнять утомительную работу по подключению. Я не могу поручиться за какие-либо специфичные для Ruby интегрированные среды DI, но я знаю о многих проектах Ruby, которые в конечном итоге были переписаны на другом языке (даже на Java), потому что природа playdoh делает вещи трудными для поддержки / расширения. Я подозреваю, что это во многом связано с тем, что разработчики стреляют себе в ногу с помощью различных мощных языковых функций. Наличие структуры DI накладывает некоторую структуру и идиомы, которые могут помочь предотвратить это.