3

我正在寻找有关应用程序设计的一些建议。由于我已签署 NDA,因此我无法透露太多有关实际业务的信息,但会尝试解释该要求。

本质上,我们希望开发一个应用程序,该应用程序将根据客户的信用状况做出决定。我们将从合适的提供商(例如 Experian)获取数据,并将其与业务规则相匹配。如果客户符合这些规则,他们会得到一个绿旗,以传递给下一个流程(可能还有另一个系统,但目前并不担心);如果没有,他们将获得红旗并且不会被传递。

客户表示他们希望业务规则是可修改的,即他们可以修改的东西,而不是硬编码或卡在某处的代码中。他们将一组规则定义为“模板”。系统一次只有一个活动模板,但在其生命周期内可能有许多模板。

这些规则将由检查不同数据类型的多个运算符组成。规则的每个阶段/步骤将被分配一定的权重。“模板”的一个例子是

  • 顾客是男的吗=10分
  • 客户是否为女性 = 20 分

  • 客户是否在 25 至 35 岁之间?= 20 分

  • 客户是否低于 25 岁?= 10 分

  • 客户是否每年赚取 30000 美元到 50000 美元之间 = 20 分

如您所见,有各种类型的比较/运算符(布尔值、整数等)。

我正在寻找可以构建这些“模板”的框架/建议。这是一个网络作业,所以我们知道我们肯定会使用某种数据库。该技术尚未确定,但可能介于 PHP 和 .NET 之间。我们认为在这个阶段很多这将在 SQL 中完成(并且想看看这是否是一个好主意)

有没有我可以通过的示例应用程序?以前有人做过这种性质的工作吗?

谢谢!

4

3 回答 3

1

我认为您正在寻找业务流程执行语言

于 2011-06-21T09:51:04.173 回答
1

我不认为让您的客户在 SQL 中编写自己的规则然后执行这些规则是一个聪明的主意。首先,您可能会遇到安全问题(例如,如果他们访问了不应访问的数据库部分),并且您透露了太多的实现细节(如果他们开始使用特定于 DBMS 的操作,然后您决定替换数据库管理系统)。

根据您要在此处投入的工作量,这对于Domain Specific Language来说听起来不错。@Ozair 建议使用 BPEL,但这可能有点矫枉过正。

于 2011-06-21T09:52:44.370 回答
0

如果你所有的规则都那么简单,你可以使用类似的东西:

Rule {
    ruleId,
    templateId,
    comparisonType,
    fieldName,
    minValue,
    maxValue,
    scoreIfPassed
}

Template {
    templateId,
    rules
}

...因此 aRule与 a 相关联Template,并指定要应用于给定字段的比较类型(如“greaterThanMin”、“lessThanMax”、“exactValue”、“insideRange”等)。然后你可以这样做:

user.score = 0;
rules = currentTemplate.rules;
for each rule in rules do
    if rule.comparisonType == 'exactValue' && user[field] == minValue
        user.score += rule.scoreIfPassed;
    else if rule.comparisonType == 'insideRange' && user[field] > minValue && user[field] < maxValue
        user.score += rule.scoreIfPassed;

    ...
end  
于 2011-06-21T10:02:51.370 回答