我有一个财务应用程序,需要检查大量规则。该文件存储在sql server中。这是一个使用C#的Web应用程序。必须检查每个文件的这些规则,并且需要考虑数百个规则。这些规则每隔几周变化一个月。我的想法是将这些规则存储在xml文件中,然后让我的代码读取xml并在文件上动态生成sql查询。出于测试目的,我们正在对这些规则进行硬编码,但希望转向更适应这些规则更改的架构。我认为xml是一个很好的方式去这里,但我很欣赏那些之前走过类似道路的人的建议。
每个规则检查的复杂性很小,通常只是简单的陈述,如:"如果A&& B&& (C || D)"然后将输出字符串写入日志文件"。
我的想法是用xml(A& B&&(C || D))对查询进行编码,并将字符串附加到xml中的该节点。如果查询成功,则写入字符串,如果查询不成功,则不写入字符串。
思想?
在回复评论时,这是一个更具体的例子: 该数据库有一个名为“资产”的实体。支持许多资产类型,例如支票,储蓄,401k,IRA等。我们要检查的规则示例如下:"如果文件有401k,则向其添加警告文本报告说"。这个例子是一个非常简单的例子。
我们还涉及更复杂和动态的情况,在这种情况下,可以在短时间内应用规则来拒绝具有特定属性类型的特定状态的客户端的文件。经典的例子是不允许在佛罗里达州的公寓。此规则最大存在一段时间,然后被删除。
根据大型贷款银行的自由裁量权,规则池不断变化。我们需要能够在站点的源代码之外进行这些规则更改。因此,使用xml并让C#解析xml并动态应用规则的想法是我的想法。这有助于澄清应用程序及其需求吗?
答案 0 :(得分:0)
所以你的支票表可能是:
id | chechGroup | checkName | sql |
1 | '401k checks'| '401k present' |select |
| '401k present'|
| ,count(*) |
| ,'remove 401k'|
|from |
| assests |
|where |
| x like '401k%'|
你可以坚持sql列中的sql返回格式:
ruleName | count | comment
'401k present'| 85 |'remove 401k'
你可能有不同类型的规则..当我做了类似的事情时,我没有返回总数,而是返回了更多类似的东西:
table | id | ruleBorken | comment
'assets' | 1 | '401k present' | 'remove 401k'
这显然会有更多的查询:
select
'assets'
,id
,'401k present'
,'remove 401k'
from
assets
where
x like '401k%'
这样可以更容易地生成交互式报告,其中聚合函数由报告(例如ssrs)完成,从而可以深入查看问题记录。
验证规则的查询可以在选择查询的存储过程中运行,并使用EXEC执行它们,也可以逐个从应用程序代码运行。
可以填充一些列(例如规则名称),但是他调用存储过程或代码。
此示例中的注释和rulename基本相同,但将注释分开并在其中放置case语句可能很方便。 - 例如当验证规则失败时,如果你有一个401k就不应该是空白的字段,那么你可以有一个case语句来告诉评论中缺少哪些字段。
如果您希望最终用户或非开发人员创建规则,那么您可以查看在代码中生成where子句的方法,并允许用户选择表,规则名称并通过某个接口生成where子句,然后保存它到你的规则表,你很高兴。
如果你的所有规则都返回一个设置格式,它允许你有一个报告模板用于所有规则 - 同样,如果你有三种类型的规则,那么你可以有三种返回格式和三种报告格式..基本上我喜欢形式化结果结构,因为它允许在其他地方重复使用