【发布时间】:2013-12-08 21:37:55
【问题描述】:
在编写面向对象的软件时,我经常使用依赖注入:
将高级功能与低级功能组合在一起:我的帐户管理服务使用存储库和验证服务,而不是自己实现它们。
将组件与其依赖项隔离:我的帐户管理服务通过接口使用它的依赖项,以便我可以交换实现、模拟单元测试等。
函数式编程语言中存在哪些模式来实现这些目标?
编辑:一位评论者正确地问:“只传递循环函数怎么样?”。我认为以下关于函数分组的评论一针见血——服务是具有一组共享依赖关系的函数集合,我可以将其作为原子组处理。
在 Clojure 中,协议似乎很好地解决了这个问题,但我真的很想知道如何更普遍地解决这个问题......
【问题讨论】:
-
你的意思不是传递函数?为什么不能满足您的需求?
-
@marcin 服务不仅仅是功能。实际上,它们通常由具有协调(在某种意义上)行为的许多功能组成。
-
@CheatEx 它们是函数(这些函数又可能由其他更小的函数组成)
-
@Mauricio 这对我来说并不那么明显。例如,让我们看看 twitter API。有很多方法,希望以某种常见的方式使用(比如已经提供的身份验证)。问题:如何将所有不同的方法表示为一个函数?是的,可以传递一个符号,识别一个方法并获取一个代表该方法的函数,但这就是我们拥有的 OO 方法(动态类型 BTW),不是吗?
标签: dependency-injection functional-programming