我正在寻找有关应用程序设计的一些建议。当我签署保密协议时,我无法透露实际业务,但会尝试解释这一要求。
基本上,我们希望开发一个基于客户信用档案做出决策的应用程序。我们将从合适的提供商(例如,Experian)获取数据,并将其与业务规则相匹配。如果客户满足这些规则,他们会得到一个绿色标志,以传递给下一个流程(可能还有另一个系统,但现在我并不担心);如果没有,他们将获得一面红旗而不会被传递。
客户已经表示他们希望业务规则可以修改,即他们可以修改的东西,而不是硬编码或卡在某处的代码中。他们将一组规则定义为“模板”。系统一次只能有一个活动模板,但在其生命周期内可能有许多模板。
这些规则将由检查不同数据类型的多个运算符组成。规则的每个阶段/步骤将被分配一定的权重。 “模板”的一个例子是
客户是女性= 20分
客户年龄在25至35岁之间吗? = 20分
客户是否未满25岁? = 10分
客户每年的收入在30000美元至50000美元之间= 20分
正如您所看到的,有各种类型的比较/运算符(布尔值,整数等)。
我正在寻找一个框架/建议,我可以在其上构建这些“模板”。这是一个Web作业,所以我们知道我们肯定会使用某种类型的DB。该技术尚未确定,但可能介于PHP& 。净。我们认为在这个阶段,很多事情都将在SQL中完成(并且想看看这是否是一个好主意)
我可以通过哪些样本申请?有没有人以前做过这种性质的工作?
谢谢!
答案 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
}
...因此Rule
与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