功能依赖注入

时间:2011-06-22 10:00:16

标签: dependency-injection functional-programming

在编写面向对象的软件时,我经常使用依赖注入:

  • 将低级功能的高级功能组合在一起:我的帐户管理服务使用存储库和验证服务,而不是自己实现它们。

  • 将组件与其依赖项隔离开来:我的帐户管理服务通过接口使用其依赖项,以便我可以交换实现,模拟单元测试等等。

为实现这些目标,函数式编程语言中存在哪些模式?

编辑:一位评论者正确地问:“只是传递圆函数怎么样?”。我认为以下关于函数分组的注释会触及头部 - 服务是具有共享依赖关系集的函数集合,我可以将其作为原子组处理。

在Clojure中,似乎协议很好地解决了这个问题,但我真的很想知道问题是如何更普遍地解决的......

3 个答案:

答案 0 :(得分:8)

前段时间我读过一个post,描述了如何将依赖注入视为函数式编程中的curry。我认为这很有意思,它提供了一个很好的视角。

答案 1 :(得分:3)

在小范围内,诸如currying和函数as-parameters之类的东西减少了对模块依赖性的需求。在更大的范围内,标准ML仿函数之类的东西对此非常有用。 Racket有一个称为单位的系统,在这方面做得也很好。

答案 2 :(得分:0)

我开发了一个小库,我发现它在功能启发(JavaScript)环境中对DI很有帮助,它没什么特别的,只是我喜欢的一点方法。