2008-11-12 66 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框架强加一些结构和习惯用法可能有助于防止这种情况。