我遇到谷歌guice,并不能真正了解它以及它做了什么,虽然它周围似乎有很多炒作。我希望得到一个关于库的clojurian视角以及为什么在clojure应用程序中需要/不需要它,以及语言中是否有类似内容。
答案 0 :(得分:14)
由于Java的OO和类型系统,在不同的底层实现之间动态切换(例如,用于测试(模拟)目的)可能难以管理。像Google Guice这样的库旨在更优雅地处理Java中的这些dependency injections。
在Clojure和其他函数式语言中,可以传递函数,这使得使用不同的实现变得更加容易。
有几种方法可以在Clojure中完成:
Clojure Programming的第12章有一些很好的OO模式示例,例如依赖注入以及在Clojure中处理这些模式的替代方法。
Sean Devlin在Clojure中的依赖注入也有Full Disclojure video。不过,他的榜样可能更好。他没有在闭包中使用完全不同的函数实现,而是使用返回函数的不同“版本”的工厂。尽管如此,要点保持不变。
基本上,依赖注入是一种在OOP中必不可少的模式,并且可以在FP中轻松解决(或者甚至不是问题)。
答案 1 :(得分:6)