找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4796|回复: 1

条件判定的互动

[复制链接]
发表于 2015-3-23 13:31:55 | 显示全部楼层 |阅读模式
最近在做业务,要求实现一个对数据进行动态条件判定的规则。
针对车辆上传的速度,根据每个用户不同的需求,动态的匹配超速规则。
比如:
有的用户,需要速度在80 -100 之间报警。
有的公户,要求在周一,三,五晚上,高度当前道路级别限速80%的时候报警。
有的用户需要在周末不允许车辆移动。

需求不断的变更,关于这样的条件排列组合,硬编码变的有些苍白。
于是在想,对于此类需求,可否整合出一个规则,也就是,无论什么情况,只要传入判断规则,即可获得true false。
如果简单的是一个顺序解析的从左到右的条件,可以简单的写一个C的词法分析。
但是考虑到()这种判断顺序的开发,条件树就得写的比较复杂。
于是想有什么讨巧的方法。
于是就有了如下的代码,借助shell来轻松搞定我的逻辑条件判定规则。

于是写了这么一个小shell脚本
  1. #!/bin/bash
  2. Condition=$1
  3. str='if '$Condition'; then \n echo true \n else\n echo false \nfi;'
  4. str1=$(echo -e $str)
  5. #echo "$str1"
  6. eval "$str1"
复制代码
C代码通过管道,传递相应的条件代码
  1. #include<stdio.h>
  2. int main(int argc ,char *argv[])
  3. {
  4.         FILE * fp;
  5.         char buffer[80]   = {'\0'};
  6.         char command[500] = {'\0'};
  7.         sprintf(command, "./test.sh '%s'", "[ 80 -gt 20 ] && [ 80 -lt 160 ]");
  8.         fp=popen(command, "r");
  9.         fgets(buffer,sizeof(buffer),fp);
  10.         printf("%s", buffer);
  11.         pclose(fp);
  12.         return 0;
  13. }
复制代码
十几行,搞定这个需求。
测试了一下,性能还不错。
发表于 2015-3-23 15:38:56 | 显示全部楼层
有种概念,叫所谓的领域驱动,逻辑和处理分离。差不多就是这个意思。
以前我做一个产品的配置项,也是用了脚本配置。变更配置项,主程序几乎不用改什么,非常方便。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 10:54 , Processed in 0.030762 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表