功能依赖注入

Dan*_*ton 7 functional-programming dependency-injection

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

  • 从较低级别的功能组合高级功能:我的帐户管理服务使用存储库和验证服务,而不是自己实现它们.

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

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

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

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

Mar*_*coS 8

前段时间我读过一篇文章,描述了依赖注入如何被视为函数式编程中的currying.我觉得这很有意思,它给出了一个很好的视角.


jac*_*obm 3

在小规模上,柯里化和函数即参数之类的东西减少了对模块依赖性的需求。在更大的范围内,像标准机器学习函子这样的东西对于这个目的非常有用。Racket 有一个称为units 的系统,在这方面也做得很好。