2012-10-26 34 views
13

我碰到过google guice,并不能真正理解它以及它做了什么,尽管似乎有很多关于它的炒作。我希望能够获得该库的clojurian视角,以及为什么clojure应用程序需要/不需要它,以及该语言中是否有类似内容。什么是谷歌guice的clojure?

回答

14

由于Java的面向对象和类型的系统中,不同的底层实现方式之间动态地切换(用于测试(嘲笑)的目的例如)可以是难以管理。像Google Guice这样的图书馆旨在更加优雅地处理Java中的这些dependency injections

在Clojure中和其他功能的语言的功能可以被传递,这使得使用不同的实现方式中容易得多。

有几种方式这可以用Clojure来完成:

  • 使用您的功能,如高阶函数参数的选择。
  • (Re)将你选择的函数绑定到var。
  • 将封闭的函数封装在关闭中,然后可以传递并调用。

Clojure Programming的第12章有一些很好的OO模式例如依赖注入和在Clojure中处理这些OO模式的方法。

肖恩·德夫林还具有Full Disclojure video上依赖注入Clojure中。不过,他的榜样可能被选择得更好。他没有在闭包中使用完全不同的函数实现,而是使用返回不同“功能版本”的工厂。主旨虽然保持不变。

基本上,依赖注入是处于OOP必要的恶,并且可以容易地得到解决(或者甚至不是一个问题)在FP的图案。

6

粗糙的Clojure当量仍处于开发阶段。目前有两个图书馆正在开发中(截至2012年10月):斯图尔特塞拉的Prismatic的Graph(尚未开源)和Flow

注意,我认为吉斯比依赖注入更多。它为应用程序配置/模块化提供了一个框架。上述图书馆旨在实现这一目标。

+3

感谢您的图书馆链接;他们看起来很有趣。我同意你对Guice的评估,除了依赖注入外,Guice还提供了一个解决方案,尽管我觉得使用Clojure支持的一些模式,你不需要那些库,因为现在创建你自己的代码已经几乎微不足道了。 (以Noir为例,介绍defpage构造如何工作,并将自动命名空间加载和将页面集合聚合成由ref或atom包装的映射)。 – deterb

+1

同意。我认为这就是Rich Hickey谈论“简单性”的原因,以及为什么现在有这么多开发者抱怨Spring Framework配置怪异。无论如何,一些Clojure应用程序已经(显然)变得足够大,需要这样的框架。 – noahlz