http://fabiokung.com/2010/05/06/ruby-and-dependency-injection-in-a-dynamic-world/: это еще один, гораздо менее самоуверенным статья, чем статьи Джеймс Бак. Нижняя линия заключается в том, что вам не нужна инъекция зависимостей, потому что Ruby предоставляет множество хороших альтернатив, которые работают так же хорошо и которые на самом деле не существуют в мире Java.
Одна из этих альтернатив - это mixins, чего нет у Java, а другая - возможность переопределить/переопределить практически что-либо на языке. Другие функции включают динамическую типизацию, в которой вы можете отправлять любое сообщение любому объекту, и если это произойдет, чтобы обеспечить реализацию этого сообщения, все будет работать. Все эти вещи работают вместе, чтобы устранить большую часть потребности в инфраструктуре DI. Шаблон проектирования как таковой по-прежнему действует и в Ruby, и иногда имеет смысл использовать его.
Еще один момент, касающийся того, что Алексей Петрушин также делает, заключается в том, что инъекция зависимостей - это, прежде всего, шаблон дизайна и что оснастка является вторичной и в основном заключается в том, чтобы избавиться от утомительности некоторых вещей на Java. В рубине вы можете тривиально эмулировать большую часть того, что весна или ухаживает для вас на Java.Таким образом, полномасштабная структура инъекций зависимостей в Ruby существенно избыточна.
Это, как говорится, иногда с каркасом DI является хорошим, так как в конечном итоге это может забрать часть утомительности электромонтажа. Я не могу ручаться за любые Ruby-специфические рамки DI, но я знаю много проектов Ruby, которые в конечном итоге были переписаны на другом языке (даже Java), потому что характер игры в стиле playdo создает трудности для поддержания/расширения. Я подозреваю, что это имеет много общего с разработчиками, стреляющими в ногу с различными мощными языковыми функциями. Наличие рамок DI накладывает немного структуры и идиомы, которые могут помочь предотвратить это.
Я должен был увидеть этот разговор лично в RubyConf в прошлый уик-энд, он проделал такую фантастическую работу. Итог - вам не нужна инъекция зависимостей в Ruby. – mwilliams 2008-11-12 13:00:28
В статье не говорится, что вы не должны использовать инъекцию зависимостей, заявив, что вам не нужна каркас DI. Вот еще одна цитата из статьи: «Итак, нет ли места для DI в Ruby? Определенно, я использую DI почти каждый день в Ruby, но я не использую рамки DI. Ruby сам обладает достаточной силой для представления любого дня - в-дневные идиомы, которые вам нужны ». – 2012-06-03 20:24:41