微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在开发一个税收计算系统,根据一组提供的标准应用各种税收.
信息经常变化,所以我试图创建一种方法将所有这些逻辑规则存储在数据库中.

可以想象,税收涉及很多复合逻辑.
例如,税收可能仅适用于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,所以不同的人可以维护它.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐