我遇到了 google guice,并不能真正理解它以及它的作用,尽管它周围似乎有很多炒作。我希望从 clojurian 角度了解该库,以及为什么在 clojure 应用程序中需要/不需要它,以及该语言中是否内置了类似的东西。
问问题
2406 次
2 回答
14
由于 Java 的 OO 和类型系统,不同底层实现之间的动态切换(例如用于测试(模拟)目的)可能难以管理。像 Google Guice 这样的库旨在更优雅地处理 Java 中的这些依赖注入。
在 Clojure 和其他函数式语言中,可以传递函数,这使得使用不同的实现变得更加容易。
在 Clojure 中有几种方法可以做到这一点:
- 使用您选择的函数作为高阶函数的参数。
- (重新)将您选择的函数绑定到 var。
- 将您选择的函数封装在闭包中,然后可以传递和调用。
Clojure Programming的第 12 章有一些很好的 OO 模式示例,例如依赖注入以及在 Clojure 中处理这些模式的替代方法。
Sean Devlin 还有一个关于 Clojure 依赖注入的完整 Disclojure 视频。不过,他的榜样可能被选得更好。他没有在他的闭包中使用完全不同的函数实现,而是使用了一个返回不同“版本”函数的工厂。要点保持不变。
基本上,依赖注入是 OOP 中必不可少的一种模式,并且可以在 FP 中轻松解决(甚至不是问题)。
于 2012-10-26T11:43:43.117 回答