Подтвердить что ты не робот

Библиотеки инъекций на основе Ruby

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

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

4b9b3361

Ответ 1

Jamis Buck, который написал Copland и Needle, опубликовал здесь о Needle, инъекции зависимостей и их полезности в мире Ruby.

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

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

НТН

Ответ 2

http://fabiokung.com/2010/05/06/ruby-and-dependency-injection-in-a-dynamic-world/: это еще одна, гораздо менее упрямая статья, чем статья Джеймса Бака. Суть в том, что вам не нужна инъекция зависимостей, потому что ruby ​​предоставляет множество хороших альтернатив, которые работают так же хорошо и которые на самом деле не существуют в мире Java.

Одна из этих альтернатив - это mixins, чего нет у Java, а другая - возможность переопределить/переопределить все, что угодно на языке. Другие функции включают динамическую типизацию, в которой вы можете отправлять любое сообщение любому объекту, и если это произойдет, чтобы обеспечить реализацию этого сообщения, все будет работать. Все эти вещи работают вместе, чтобы устранить большую часть потребности в инфраструктуре DI. Шаблон дизайна как таковой по-прежнему действует и в Ruby, и иногда имеет смысл использовать его.

Еще один момент, о котором говорит Алексей Петрушин, заключается в том, что инъекция зависимостей - это прежде всего шаблон проектирования, а оснащение - вторичная и в основном - избавление от утомительности некоторых вещей на Java. В рубине вы можете тривиально эмулировать большинство из того, что spring или guice для вас на Java. Таким образом, полномасштабная инфраструктура инъекций зависимостей в Ruby существенно избыточна.

Говоря это, иногда наличие рамок DI является приятным, так как в конечном счете это может забрать часть утомительности электромонтажа. Я не могу ручаться за любые Ruby-специфические рамки DI, но я знаю много проектов Ruby, которые в конечном итоге были переписаны на другом языке (даже Java), потому что характер игры в стиле playdo создает трудности для поддержания/расширения. Я подозреваю, что это имеет много общего с разработчиками, стреляющими в ногу с различными мощными языковыми функциями. Наличие рамки DI накладывает немного структуры и идиомы, которые могут помочь предотвратить это.

Ответ 3

Здесь еще один IoC http://alexeypetrushin.github.com/micon

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

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

Я смотрел разговоры о Джамисе Баке, и я согласен и не согласен с ним, вот почему http://ruby-lang.info/blog/you-underestimate-the-power-of-ioc-3fh