条件判定的互动
最近在做业务,要求实现一个对数据进行动态条件判定的规则。针对车辆上传的速度,根据每个用户不同的需求,动态的匹配超速规则。
比如:
有的用户,需要速度在80 -100 之间报警。
有的公户,要求在周一,三,五晚上,高度当前道路级别限速80%的时候报警。
有的用户需要在周末不允许车辆移动。
需求不断的变更,关于这样的条件排列组合,硬编码变的有些苍白。
于是在想,对于此类需求,可否整合出一个规则,也就是,无论什么情况,只要传入判断规则,即可获得true false。
如果简单的是一个顺序解析的从左到右的条件,可以简单的写一个C的词法分析。
但是考虑到()这种判断顺序的开发,条件树就得写的比较复杂。
于是想有什么讨巧的方法。
于是就有了如下的代码,借助shell来轻松搞定我的逻辑条件判定规则。
于是写了这么一个小shell脚本
#!/bin/bash
Condition=$1
str='if '$Condition'; then \n echo true \n else\n echo false \nfi;'
str1=$(echo -e $str)
#echo "$str1"
eval "$str1"
C代码通过管道,传递相应的条件代码
#include<stdio.h>
int main(int argc ,char *argv[])
{
FILE * fp;
char buffer = {'\0'};
char command = {'\0'};
sprintf(command, "./test.sh '%s'", "[ 80 -gt 20 ] && [ 80 -lt 160 ]");
fp=popen(command, "r");
fgets(buffer,sizeof(buffer),fp);
printf("%s", buffer);
pclose(fp);
return 0;
}
十几行,搞定这个需求。
测试了一下,性能还不错。
有种概念,叫所谓的领域驱动,逻辑和处理分离。差不多就是这个意思。
以前我做一个产品的配置项,也是用了脚本配置。变更配置项,主程序几乎不用改什么,非常方便。
页:
[1]