3

我有一个财务应用程序,它有大量的规则要检查。该文件存储在 sql server 中。这是一个使用 C# 的 Web 应用程序。必须检查每个文件的这些规则,并且需要考虑数百条规则。这些规则每隔几周到几个月就会改变一次。我的想法是将这些规则存储在 xml 文件中,并让我的代码读取 xml 并动态生成文件上的 sql 查询。出于测试目的,我们对这些规则进行了硬编码,但希望迁移到更能适应这些规则变化的架构。我认为 xml 是一个很好的方式,但我会感谢那些以前走类似道路的人的建议。

每个规则检查的复杂性很小,通常只是简单的语句,例如:“如果 A && B && (C || D)”则将输出字符串写入日志文件”。

我的想法是在 xml (A && B && (C || D)) 中编码查询并将字符串附加到 xml 中的该节点。如果查询成功,则写入字符串,如果查询不成功,则不写入字符串。

想法?

作为对评论的回应,这里有一个更具体的示例:数据库有一个名为“资产”的实体。支持多种资产类型,例如支票、储蓄、401k、IRA 等。我们要检查的规则示例是:“如果文件有 401k,则将警告文本附加到报告中” . 该示例适用于一个非常简单的案例。

我们还涉及更复杂和动态的情况,在这些情况下,可能会在短时间内应用规则来拒绝具有特定属性类型的特定状态的客户端的文件。典型的例子是佛罗里达州不允许公寓。此规则最多存在一段时间,然后被删除。

基于大型贷款银行的自由裁量权,规则池不断变化。我们需要能够在站点的源代码之外进行这些规则更改。因此,使用 xml 并让 C# 解析 xml 并动态应用规则的想法是我的想法。这是否有助于阐明应用程序及其需求?

4

1 回答 1

0

你能有一个带有 SQL 的表吗?然后,您可以通过让 SQL 返回特定结构来将其形式化。

所以你的支票表可能是:

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 执行它们的存储过程中运行,也可以从您的应用程序代码中一一运行。

可以填充某些列(例如规则名称),但他调用存储过程或代码。

此示例中的注释和规则名称基本相同,但将注释分开并在其中放置 case 语句会很方便。- 例如,当验证规则失败时,如果您有 401k,则说在不应为空白的字段上,然后您可以有一个案例语句来说明注释中缺少哪些字段。

如果您希望最终用户或非开发人员创建规则,那么您可以查看在代码中生成 where 子句并允许用户选择表、规则名称并通过某个界面生成 where 子句的方法,然后将其保存到您的规则中桌子,你很高兴。

如果您的所有规则都返回一个集合格式,它允许您为所有规则拥有一个报告模板 - 同样,如果您只有三种类型的规则,那么您可以拥有三种返回格式和三种报告格式.. 基本上我喜欢形式化结果结构因为它允许在其他地方更多地重复使用

于 2013-09-11T09:41:39.913 回答