应用程序设计 - 可修改的业务规则

时间:2011-06-21 09:46:27

标签: design-patterns business-logic business-rules

我正在寻找有关应用程序设计的一些建议。当我签署保密协议时,我无法透露实际业务,但会尝试解释这一要求。

基本上,我们希望开发一个基于客户信用档案做出决策的应用程序。我们将从合适的提供商(例如,Experian)获取数据,并将其与业务规则相匹配。如果客户满足这些规则,他们会得到一个绿色标志,以传递给下一个流程(可能还有另一个系统,但现在我并不担心);如果没有,他们将获得一面红旗而不会被传递。

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

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

  • 客户是男性= 10分
  • 客户是女性= 20分

  • 客户年龄在25至35岁之间吗? = 20分

  • 客户是否未满25岁? = 10分

  • 客户每年的收入在30000美元至50000美元之间= 20分

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

我正在寻找一个框架/建议,我可以在其上构建这些“模板”。这是一个Web作业,所以我们知道我们肯定会使用某种类型的DB。该技术尚未确定,但可能介于PHP& 。净。我们认为在这个阶段,很多事情都将在SQL中完成(并且想看看这是否是一个好主意)

我可以通过哪些样本申请?有没有人以前做过这种性质的工作?

谢谢!

3 个答案:

答案 0 :(得分:1)

我认为您正在寻找Business Process Execution Language

答案 1 :(得分:1)

我认为让您的客户在SQL中编写自己的规则然后执行这些规则是不明智的。首先,您可能会遇到安全问题(例如,如果他们访问不应该访问数据库的某些部分),并且您泄露了太多的实现细节(如果他们开始使用特定于DBMS的操作,那么您以后决定更换DBMS)。

根据你想放在这里的工作量,这对于Domain Specific Language来说听起来不错。 @Ozair提出了BPEL,但它可能有点过分。

答案 2 :(得分:0)

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

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

Template {
    templateId,
    rules
}

...因此RuleTemplate相关联,并指定要应用的比较类型(例如'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