我想用JSON来描述一段简单的逻辑代码,生为一段配置化的文件。怎么描述成本最低?逻辑代码类似于这样
if( body.type === 1 ){
body.renderTime = body.time
}else if(body.type === 0){
body.renderTime = body.content
}
补一个配置代码:
在exec位置放逻辑配置代码
{
name: '供应材料价格信息',
component: 'dyDragTable',
dataOrigin: 'supplyContractPriceList',
hookName: 'commonProcessNumber|changeMaterialPrice',
style: {
width: [150, 100, 80, 150, 150, 100, 150, 150],
},
exec:{
// 这里放简单处理逻辑配置
},
children: {
materialName: '材料名称',
bindStation: '站点',
materialPrice: '原材料价格',
beginTime: '原起始时间',
endTime: '原结束时间',
changeMaterialPrice: '变更后材料价格',
changeBeginTime: '变更后起始时间',
changeEndTime: '变更后结束时间',
},
func: {
isShow(busData: any, opt: any) {
if (busData.contractType === '0') {
opt.isComponentShow = '1'
}
},
},
},
如果按你提供的样本,最简单的是配置系列条件,这里的exec应该是一个数组:
然后写一个方法来应用配置:
或者把事情搞复杂,写一个DSL解决,exec里面存的就是自定义的语言了,看起来很高大上不是吗(警告:除了增加复杂性,没有卵用,纯属我今天摸鱼时间多 😄)代码太长直接戳这里
咱的语言长的像这样:
这是语法:
我们的“语言”很简单,只有几个有限的符号.
词法解析很容易:
使用最简单的递归下降生成语法树,基本上就把上面bnf描述变成一个个js方法就可以了,清晰起见我用class实现
最后访问者模式遍历ast,生成js code,要把事情变得更复杂也可以写一个interpreter
表达式和语句的数据结构
使用的时候利用
new Function
生成方法执行就可以了: