JAVA 中的数据驱动 Validation/Rule 引擎

Data Driven Validation/Rule Engine in JAVA

在我进一步使用它之前,我有数据和一系列验证(业务逻辑)。喜欢以下:-

{
    "site"      : "UK",
    "domain"    : "xyz.UK",
    "currency"  : "DOLLAR",
    "type"      : "unlimited",
    "limit"     : ""
}

{
    "site"      : "UK",
    "domain"    : "xyz.UK",
    "currency"  : "EURO",
    "type"      : "limited",
    "limit"     : "100"
}

{
    "site"      : "US",
    "domain"    : "xyz.COM",
    "currency"  : "DOLLAR",
    "type"      : "limited",
    "limit"     : ""
}

验证流程类似于

  1. 域验证

    站点 = 我们 >> 域 = .com

    站点 = 英国 >> 域名 = .uk

  2. 货币验证

    站点 = 我们 >> 货币 = 美元

    站点 = 英国 >> 货币 = 欧元

  3. 类型验证

    站点 = 我们 >> 类型 = "only limited"

    站点 = 我们 >> 类型 = "limited/unlimited"

    type = limited >> limit > 0

    type = unlimited >> limit == null

所以只有第二个 JSON 会通过验证。第一个有错误的货币和 3 个限制为空。 更多字段将继续添加,验证将继续增加。我不想将验证放在 JAVA 代码中 因为我必须一次又一次地更改代码。有没有其他方法可以保存 validations/rules 和数据库中的序列 从数据库中获取 validation/rules 以验证数据。如果我需要更改或添加更多内容,我可以修改数据库。

假设财务数据集作为Java bean可用(并且有错别字US/UK),第三次验证可以写成:

rule "check type"
when
    Data( site == "US" && type == "limited ||
          site == "UK" && type == "limited || == "unlimited,
          type == "limited" && limit != null && limit > 0 ||
          type == "unlimited" && limit == null )
then
    // Data's type and limit is OK
end

此规则将"pass" 检查。要确定问题所在,您需要更多规则,每条规则都指出了一些错误。