freeeyes 发表于 2015-3-23 13:31:55

条件判定的互动

最近在做业务,要求实现一个对数据进行动态条件判定的规则。
针对车辆上传的速度,根据每个用户不同的需求,动态的匹配超速规则。
比如:
有的用户,需要速度在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;
}
十几行,搞定这个需求。
测试了一下,性能还不错。

winston 发表于 2015-3-23 15:38:56

有种概念,叫所谓的领域驱动,逻辑和处理分离。差不多就是这个意思。
以前我做一个产品的配置项,也是用了脚本配置。变更配置项,主程序几乎不用改什么,非常方便。
页: [1]
查看完整版本: 条件判定的互动