什么是相当于谷歌guice的clojure?

时间:2012-10-26 10:41:56

标签: clojure guice

我遇到谷歌guice,并不能真正了解它以及它做了什么,虽然它周围似乎有很多炒作。我希望得到一个关于库的clojurian视角以及为什么在clojure应用程序中需要/不需要它,以及语言中是否有类似内容。

2 个答案:

答案 0 :(得分:14)

由于Java的OO和类型系统,在不同的底层实现之间动态切换(例如,用于测试(模拟)目的)可能难以管理。像Google Guice这样的库旨在更优雅地处理Java中的这些dependency injections

在Clojure和其他函数式语言中,可以传递函数,这使得使用不同的实现变得更加容易。

有几种方法可以在Clojure中完成:

  • 在高阶函数中使用您选择的函数作为参数。
  • (重新)将您选择的功能绑定到var。
  • 将您选择的函数封装在闭包中,然后可以传递并调用它们。

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

Sean Devlin在Clojure中的依赖注入也有Full Disclojure video。不过,他的榜样可能更好。他没有在闭包中使用完全不同的函数实现,而是使用返回函数的不同“版本”的工厂。尽管如此,要点保持不变。

基本上,依赖注入是一种在OOP中必不可少的模式,并且可以在FP中轻松解决(或者甚至不是问题)。

答案 1 :(得分:6)

粗略的Clojure等价物仍在开发中。目前正在开发的两个图书馆(截至2012年10月):Pruartmatic的Graph(尚未开源)和Flow作者:Stuart Sierra。

请注意,我认为Guice不仅仅是依赖注入。它为应用程序配置/模块化提供了框架。上述图书馆旨在实现这一目标。