Библиотеки внедрения зависимостей Ruby - PullRequest
25 голосов
/ 12 ноября 2008

Я смотрел на некоторые библиотеки внедрения зависимостей Ruby. В частности, я проверил Игла и Копленд . Они были вокруг в течение довольно долгого времени, но не так много употреблений.

Каковы некоторые плюсы и минусы использования этих двух библиотек? Похоже, что многие библиотеки / фреймворки могут эффективно использовать эти две библиотеки, например, Крюк Merb / Datamapper .

Ответы [ 3 ]

46 голосов
/ 12 ноября 2008

Джеймис Бак, который написал Copland and Needle, опубликовал здесь о Needle, внедрении зависимостей и их полезности в мире Ruby.

Это долго, но стоит прочесть, но если вы хотите, чтобы один абзац был наиболее актуален для вашего вопроса, я бы предложил этот, непосредственно перед концом:

DI-фреймворки не нужны. В большем жесткие среды, они имеют ценность. В гибких средах, таких как Ruby, нет так много. Сами образцы могут по-прежнему применимо, но остерегайтесь попасть в ловушку думать о тебе нужен специальный инструмент для всего. Ruby - это Play-Doh, помни! Давайте держать это так.

НТН

7 голосов
/ 31 октября 2012

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 накладывает некоторую структуру и идиомы, которые могут помочь предотвратить это.

1 голос
/ 17 июня 2011

Вот еще один IoC http://alexeypetrushin.github.com/micon

Я использовал его как основной компонент моей веб-инфраструктуры (не Rails). Вы можете увидеть, как он работает здесь - http://ruby -lang.info (этот сайт работает на нем). И это сэкономило мне много времени и кода, поэтому я лично считаю IoC очень полезным (в некоторых ситуациях).

DI-фреймворки не нужны. В более жестких условиях они имеют ценность. В гибких средах, таких как Ruby, не так много. Сами образцы могут все еще быть применимыми, но остерегайтесь попадания в ловушку мышления, вам нужен специальный инструмент для всего. Ruby - это Play-Doh, помни! Давайте так держать.

Я наблюдал за разговором о Джемисе Баке, и я согласен и не согласен с ним, вот почему http://ruby -lang.info / blog / you-недооценивать силу-ioc-3fh

...