Boroda aka Hamster (fantaseour) wrote,
Boroda aka Hamster
fantaseour

Category:

Ruby и IoC

Ковыряюсь в руби. Появился некоторый навык и теперь хочется докопаться до подробностей.

Полез посмотреть, как там с моей навязчивой идеей об IoC. Для PHP эта концепция красиво и легковесно (300 строк кода) решена в Phemto (рус. перевод здесь). Более продвинуто концепция реализована в компоненте для Symfony.

В Руби, однако, такая концепция не дает столь замечательных результатов, поскольку там в класс можно добавлять и переопределять методы уже после того, как класс объявлен и объект создан. А также там есть механизм модулей:

# connection_provider.rb
 
module ConnectionProvider
  def connection
    # open a database connection and return it
  end
end
 
# reopening the class to mix the module in
class Repository
  include ConnectionProvider
end


Т.е. минимальная инъекция может быть сделана средствами языка.

В сообществе есть Jamis Buck, который сначала сделал тяжелый IoC для руби – Copland. О котором делал доклад на рубиконф в 2004. По следам доклада Jim Weirich написал статью Dependency Injection in Ruby о том, как можно сделать легкий DI контейнер без тяжелой артиллерии.

Подход, изложенный в статье очень похож на Phemto, о котором я уже говорил.

Вдохновившись такой легковесностью, Jamis Buck делает еще один фреймворк, -- Needle

Он пытается использовать концепт в своих проектах. В частности в библиотеке Net::SSH 1. И постепенно приходит к выводу, что фреймворк для IoC в Руби не нужен, -- все, что нужно от DI можно сделать встроенными средствами. Таким образом ценность концепции DI для руби сохраняется.

В результате автор двух фреймворков пишет длинный лирично-исторический пост LEGOs, Play-Doh, and Programming.

Ну что ж, пока не попробуешь, не поймешь насколько удобно без библиотеки для контейнера. В PHP, из-за отсутствия гибкости, данный подход очень часто спасал от неконтролируемых зависимостей.

Дополнительное чтение:
Fabio Kung, Ruby and dependency injection in a dynamic world
Tags: development, php, rails, ruby
Subscribe

  • Так. Чуть не бросил дневник :)

    Ну вот, хотел не бросать и опять сюда не пишу :( Потому, что в будние дни сил нет писать, а в выходные вот то у меня ДР, то у пасынка. То просто…

  • 46

    Дня рожденья пост. Ну ничего, мы еще позажигаем :)

  • Завтра в офис

    Завтра выхожу на работу в офис. Будет, как первый день, поскольку у меня места рабочего нет пока -- ноутбук есть, а места нет. Выходящие либо сдают…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 9 comments