我碰到过google guice,并不能真正理解它以及它做了什么,尽管似乎有很多关于它的炒作。我希望能够获得该库的clojurian视角,以及为什么clojure应用程序需要/不需要它,以及该语言中是否有类似内容。什么是谷歌guice的clojure?
13
A
回答
14
由于Java的面向对象和类型的系统中,不同的底层实现方式之间动态地切换(用于测试(嘲笑)的目的例如)可以是难以管理。像Google Guice这样的图书馆旨在更加优雅地处理Java中的这些dependency injections。
在Clojure中和其他功能的语言的功能可以被传递,这使得使用不同的实现方式中容易得多。
有几种方式这可以用Clojure来完成:
- 使用您的功能,如高阶函数参数的选择。
- (Re)将你选择的函数绑定到var。
- 将封闭的函数封装在关闭中,然后可以传递并调用。
Clojure Programming的第12章有一些很好的OO模式例如依赖注入和在Clojure中处理这些OO模式的方法。
肖恩·德夫林还具有Full Disclojure video上依赖注入Clojure中。不过,他的榜样可能被选择得更好。他没有在闭包中使用完全不同的函数实现,而是使用返回不同“功能版本”的工厂。主旨虽然保持不变。
基本上,依赖注入是处于OOP必要的恶,并且可以容易地得到解决(或者甚至不是一个问题)在FP的图案。
6
相关问题
- 1. 谷歌Guice定制范围
- 2. Swagger和谷歌Guice设置
- 3. 什么是在谷歌
- 4. Guice的MembersInjectors是什么?
- 5. 谷歌Guice中的条件匹配
- 6. 谷歌地图中的mapload是什么?
- 7. 谷歌的GCLID参数是什么?
- 8. 谷歌音译的限制是什么?
- 9. 谷歌图表的力量是什么?
- 10. 谷歌的字符编码是什么?
- 11. 谷歌+的计划是什么?
- 12. 什么是clojure Eduction?
- 13. 什么是Clojure中
- 14. 谷歌Guice谷歌Appengine:映射与工作_ah
- 15. 用谷歌guice拦截构造函数
- 16. 谷歌guice如何在内部工作
- 17. 什么是谷歌API和框架API
- 18. 是什么让谷歌搜索崩溃?
- 19. 什么是谷歌云pub/sub延迟
- 20. 什么是DomHelper在谷歌关闭?
- 21. 什么谷歌注册编号是
- 22. 什么是Guice Mapbinder的好用例?
- 23. 谷歌的Dremel是什么?它与Mapreduce有什么不同?
- 24. Clojure:`和〜@是什么意思?
- 25. 任何人都可以提供一个清楚的解释,为什么谷歌Guice是有用的?
- 26. 谷歌Chrome数据库谷歌Chrome应用的大小限制是什么?
- 27. 什么是Clojure的同花顺,为什么它是必要的?
- 28. 为什么“谷歌是没有定义”当我加载谷歌JS API
- 29. 为什么我的网址去谷歌
- 30. 这个clojure代码是做什么的?
感谢您的图书馆链接;他们看起来很有趣。我同意你对Guice的评估,除了依赖注入外,Guice还提供了一个解决方案,尽管我觉得使用Clojure支持的一些模式,你不需要那些库,因为现在创建你自己的代码已经几乎微不足道了。 (以Noir为例,介绍defpage构造如何工作,并将自动命名空间加载和将页面集合聚合成由ref或atom包装的映射)。 – deterb
同意。我认为这就是Rich Hickey谈论“简单性”的原因,以及为什么现在有这么多开发者抱怨Spring Framework配置怪异。无论如何,一些Clojure应用程序已经(显然)变得足够大,需要这样的框架。 – noahlz