2008-11-12 65 views

回答

46

Jamis Buck,誰寫了Copland和Needle,posted here關於Needle,依賴注入和它們在Ruby世界中的用處。

很長,但值得一讀,但如果你想最相關的問題的一個段落,我建議這一塊,從剛結束前:

DI框架是不必要的。在更嚴格的環境中,它們具有價值。 在像Ruby這樣的敏捷環境中,不是 這麼多。模式本身可能 仍然適用,但要小心 落入陷阱的想法你 需要一切的一個特殊工具。 Ruby是Play-Doh,請記住!讓我們保持 這樣。

HTH

+2

上個週末我在RubyConf上看到了這個演講,他做了這麼棒的工作。底線 - 你不需要在Ruby中進行依賴注入。 – mwilliams 2008-11-12 13:00:28

+9

這篇文章並不是說你不應該使用依賴注入,而是說你不需要DI框架。這篇文章的另一句話是:「所以,在Ruby中DI沒有空間嗎?當然,我幾乎每天都在使用DI,但是我沒有使用DI框架,Ruby本身有足夠的能力來代表任何一天您需要的每日DI成語。「 – 2012-06-03 20:24:41

1

這裏有一個更國際奧委會http://alexeypetrushin.github.com/micon

我用它作爲我的Web框架(未Rails的),你可以看到它在這裏工作的核心組成部分 - http://ruby-lang.info(本站供電,它)。 它爲我節省了很多時間和代碼,所以我個人發現IoC非常有用(在某些情況下)。

DI框架是不必要的。在更嚴格的環境中,它們具有價值。在Ruby等敏捷環境中,並非如此。模式本身可能仍然適用,但要小心陷入思維陷阱,因爲你需要一個專門的工具來處理所有事情。 Ruby是Play-Doh,請記住!讓我們保持這種方式。

我看到了Jamis巴克的談話,我同意不同意和他的智慧,這是原因http://ruby-lang.info/blog/you-underestimate-the-power-of-ioc-3fh

7

http://fabiokung.com/2010/05/06/ruby-and-dependency-injection-in-a-dynamic-world/:這又是一個,比詹姆斯·巴克的文章更自以爲是的文章。底線是你不需要依賴注入,因爲ruby提供了很多很好的替代品,這些替代品在Java世界中工作得並不那麼成功。

其中一種替代方法是mixin,這是Java所沒有的,另一種是可以覆蓋/重新定義該語言中的任何內容。其他功能還包括動態輸入,其中基本上可以將任何消息發送給任何對象,並且如果它恰好爲該消息提供實現,則事情就會起作用。所有這些東西一起工作以消除DI框架的大部分需求。這樣的設計模式在Ruby中仍然有效,有時使用它也是有意義的。

上面還介紹了關於DI的另一點,即依賴注入主要是一種設計模式,而工具是次要的,主要是擺脫Java中某些事情的單調乏味。在ruby中,你可以輕鬆地模擬Java中大部分Spring或Guice爲你做的事情。所以一個完整的依賴注入框架在Ruby中基本上是多餘的。

話雖如此,有時有一個DI框架是一種很好,因爲最終它可以帶走一些枯燥的佈線東西了。我不能擔保任何Ruby特定的DI框架,但是我知道很多Ruby項目最終被另一種語言(甚至Java)重寫,因爲事物的playdoh性質導致事情難以維護/擴展。我懷疑這與開發者利用各種強大的語言功能在自己的腳下進行攻擊有很大關係。有一個DI框架強加一些結構和習慣用法可能有助於防止這種情況。