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

zca*_*ate 14 clojure guice

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

Nie*_*lsK 14

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

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

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

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

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

Sean Devlin还有关于Clojure中依赖注入的完整Disclojure视频.不过,他的榜样可能更好.他没有在闭包中使用完全不同的函数实现,而是使用返回函数的不同"版本"的工厂.尽管如此,要点保持不变.

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


noa*_*hlz 6

粗略的Clojure等价物仍在开发中.目前正在开发的两个图书馆(截至12年12月):Prismatic的Graph(尚未开源)和Stuart Sierra的Flow.

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

  • 感谢图书馆链接; 他们看起来很有趣.我同意你的评价Guice提供的解决方案不仅仅是依赖注入,虽然我觉得Clojure的一些模式使你不需要那些库,因为现在创建你自己几乎是微不足道的(以Noir为例,了解defpage构造的工作原理,并结合自动命名空间加载和将页面集合聚合到由ref或atom包装的地图中). (3认同)