加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 设计数据驱动的逻辑系统

发布时间:2020-12-15 17:23:40 所属栏目:百科 来源:网络整理
导读:我正在开发一个税收计算系统,根据一组提供的标准应用各种税收. 信息经常变化,所以我试图创建一种方法将所有这些逻辑规则存储在数据库中. 可以想象,税收涉及很多复合逻辑. 例如,税收可能仅适用于A为真,B小于100,且C等于7的情况. 我目前的设计很糟糕. 我有一些
我正在开发一个税收计算系统,根据一组提供的标准应用各种税收.
信息经常变化,所以我试图创建一种方法将所有这些逻辑规则存储在数据库中.

可以想象,税收涉及很多复合逻辑.
例如,税收可能仅适用于A为真,B小于100,且C等于7的情况.

我目前的设计很糟糕.
我有一些数据库列用于非常常见的标准过滤,例如位置和纳税年份.
对于更复杂的逻辑,我有一个包含JavaScript的列,在代码中,我运行一个解释器来过滤结果.性能和可维护性很糟糕.

我想通过使逻辑完全由数据驱动来改进这种设计,但是我无法弄清楚如何在关系数据库中正确表示这种逻辑.在数据库中对此逻辑进行建模的好方法是什么?

解决方法

我已经为这个类似的问题研究了一年多的制造成本生成应用程序.同样,它根据设计和其他库存考虑因素(例如数量,批量购买选项,零件供应商,电气等级等)接收产品设计数据输入的负载.结果是直接材料,人工和成本的列表.

我从一开始就知道我需要的是某种查询语言而不是计算语言,它必须是脚本化的,而不是编译的.但我还没有找到一个完美的解决方案:

方法1 – SQL
我创建了表示我的对象和表示属性的列的表,然后手动输入了item_rules表中所需的所有SQL SELECT语句.我做的是首先将对象保存到数据库中,然后我做了

rules = SELECT * FROM item_rules
foreach(rules as _rule)
{
   count = SELECT COUNT(*) FROM (_rule[select_statement]) as T1
   if(count > 1) itemlist.add(_rule[item_that_satisfy_rule])
}

它的作用是使用item_rules表中的每个规则并针对我现在在表中的对象运行它.例如SELECT * FROM my_object WHERE A = 5 AND B> 10.如果我成功拿起它,我得到一个正数,然后我知道我应该将相应的规则项包括在我的项目列表中.

方法2 – NCALC
我找到了NCALC开源表达式解析库,而不是以SQL格式存储查询. NCALC接受字符串表达式和选项变量并计算结果.字符串表达式可以以纯文本形式存储在文件系统中.

方法3 – EXCEL
EXCEL实际上是用于进行数据查找的非常好的软件.您可以在Excel中创建公式,然后将应用程序中的数据提供给excel,然后让excel运行公式以获得结果.优点是很多人都知道如何使用excel,所以不同的人可以维护它.

但就像我说的那样,这些都不适合我.我只是分享,希望我们能得到更好的推荐.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读