在编写面向对象的软件时,我经常使用依赖注入:
将低级功能的高级功能组合在一起:我的帐户管理服务使用存储库和验证服务,而不是自己实现它们。
将组件与其依赖项隔离开来:我的帐户管理服务通过接口使用其依赖项,以便我可以交换实现,模拟单元测试等等。
为实现这些目标,函数式编程语言中存在哪些模式?
编辑:一位评论者正确地问:“只是传递圆函数怎么样?”。我认为以下关于函数分组的注释会触及头部 - 服务是具有共享依赖关系集的函数集合,我可以将其作为原子组处理。
在Clojure中,似乎协议很好地解决了这个问题,但我真的很想知道问题是如何更普遍地解决的......
答案 0 :(得分:8)
前段时间我读过一个post,描述了如何将依赖注入视为函数式编程中的curry。我认为这很有意思,它提供了一个很好的视角。
答案 1 :(得分:3)
在小范围内,诸如currying和函数as-parameters之类的东西减少了对模块依赖性的需求。在更大的范围内,标准ML仿函数之类的东西对此非常有用。 Racket有一个称为单位的系统,在这方面做得也很好。
答案 2 :(得分:0)
我开发了一个小库,我发现它在功能启发(JavaScript)环境中对DI很有帮助,它没什么特别的,只是我喜欢的一点方法。