在功能编程中处理用户配置

时间:2018-04-14 13:51:34

标签: javascript configuration functional-programming

我有一系列(纯)函数负责扩展对象图中的标记。

我不会详细介绍细节,因为它们并不重要,但它们类似于:

expandData => expandDataNodes => expandDataNode => expandDataNodeItem

我的一切工作正常,但我现在有了新的要求,这意味着我现在需要在expandDataNodeItem中使用用户定义的配置。显然在OO世界中,这是一个微不足道的问题,只需通过getter在DataExpander类上使用配置并在需要时将其拉出来,但我对处理这种情况的选项感兴趣。使用功能范例。

我知道我可以为这些函数中的每一个添加一个参数,并向下传递选项或函数以访问该选项,但是这会产生许多函数,这些函数对将它添加到签名中的选项不感兴趣感觉真的很混乱。

目前我能想到的最好的选择是将所有这些函数包装在另一个函数中,并使用闭包使选项可用于所有函数,但是有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

有了这几个细节,我会尝试另一种方法:你可以重构你的代码,这样需要一些配置的功能可能已经注入了部分应用的功能。也就是说,您当前的函数应该是高阶函数

检查我演示该方法的以下示例:



const f = ( { config1, configN } ) => x => config1 + x
const g = f => x => f ( x )

const settings = {
  config1: 1
}

// _f would be the function that you would provide
// when you need to do certain operation based on 
// who knows what configuration
const _f = f ( settings )
const y = g ( _f ) ( 2 )

console.log( y )