понедельник, 15 августа 2011 г.

IoC & DI в Ruby (Inversion of Control & Dependency Injection)

Хотел бы немного обсудить такую заброшенную концепцию как инверсия
управления.

На эту тему даже есть несколько презентаций, Джим Вейрих, еще кто-то -
создатель IoC Needle. Суть вкратце - они попробовали, у них получилось
хуже чем без и сделали вывод что IoC - неприменим для Ruby.

Мне кажется что то что их понимание того, что такое IoC / DI несколько
не полное (или может я что-то не так понимаю).

Восновном, все аргументы сводятся к тому что поскольку в руби и так
есть метапрограмминг то IoC не нужен. Подозреваю, что это происходит
из-за того что IoC пошли из мира Java и поскольку там нет
метапрограмминга, то байткод-манипуляция которую выполняет IoC имеет
огромное значение.
И, по моему из-за этого у многих создалось впечатление что байткод-
манипуляции и метапрограмминг - это и есть то чем должен занимаеться
IoC. Но это не так, это вообще не имеет никакого отношения к IoC, это
просто конкретная реализация этой концепции в Java.

При этом совершенно игнорируются то для чего IoC собственно и
создавался - разрешение зависимостей, автоматический поиск, загрузка,
конфигурирование и сборка.

Что самое смешное - предполагается использование IoC совместно с
'require' (никому не кажется это странным?) -особенно если учесть что
основное назначение IoC - как раз и есть - избавится от всяческих
'require' и прочих явных управлений зависимостями.

Вобшем, чуть больше ем полугода назад представился случай использовать
IoC для решения одной конкретной задачи, и по моему субьективному
мнению - использование IoC сильно ее упростило, вот этот IoC -
https://github.com/alexeypetrushin/micon

Там 2 конкретных примера - первый - краткая демонстрация что это
вообще такое и как он работает.
Первый пример - хороший пример как сделать Hello World с
использованием IoC, но при этом он также и отличный пример неверного и
неэффективного (в моем понимании) применения IoC.
Именно такое использование демонстрируется в вышеозначенных
презентациях и на его основании заключается неэффективность IoC
вообще.

Самое интересное во 2м примере, это тот-же первый пример, но
переделанный так как и должен работать (в моем понимании) IoC (он там
работает впаре с автоматическим загрузчиком классов). Там нет :require
и явных конфигов - все ищется, загружается, конфигурируется и
собирается автоматически.

Особенно заметно преимущество IoC, когда так-же автоматически, без
require, MyApp.config[:option_a] и прочего собирается приложение из
десятков компонентов разбросанных по где-то 8-11 гемам.

Вобщем, у меня ощущение - то-ли IoC незаслуженно забыты, я чего-то не
понимаю, было-бы интересно узнать что вы думаете.

P.S.
еще чуть подробнее про IoC http://ruby-lang.info/blog-ru/vy-niedootsienivaietie-moshch-ioc-u3l
а это собственно само приложение на его базе
http://ruby-lang.info/blog-ru/rad-vieb-frieimvork-po3

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ

Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Комментариев нет:

Отправить комментарий