如何按需调用某些方法

时间:2017-03-22 12:16:43

标签: design-patterns drools

这是一项贷款业务,当用户来借钱时,应按drools执行批量规则以产生最终决定:拒绝/手动审核/通过。

例如,有以下规则:

- rule1 count(userId, refuse) > 1 ? Manually Review : Pass
- rule2 count(userId, manuallyReview) > 2 ? Manually Review : Pass
- rule3 count(userId, distinct institution between 1 year) > 5 ? Manually Review : Pass
- rule4 count(userId,distinct institution count between 1 month) > 3 ? Manually Review : Pass   
- rule5 count(userId,distinct institution count between 7 days) > 1 ? Manually Review : Pass    
- rule6 count(userId) > 0 ?  Manually Review : Pass  
- rule7 sum(notYetSettledAmount) > 0 ? Refuse : Pass 

等等。

每条规则对应一个服务接口。因为不同的场景具有不同的执行规则,例如场景1应该执行规则:1 3 5,场景2应该执行规则:2 4 6。

在启动规则引擎之前应获取所需的所有数据。例如,在场景1中,一个用户来借钱,这个场景应该执行规则1 3 5,所以首先我应该获得所有数据。现在我有以下方法来实现它 - 即调用方法on demand

List<RuleData> getRuleDataList(String userId,List<String> ruleNoList){
    List<RuleData> result = ...        
    if(ruleNoList.contains("RN001")){
        result.add(getRule1Data(userId)); //get data of rule 1 e.g. count(userId, refuse)
    }
    else if(ruleNoList.contains("RN002")){
        result.add(getRule2Data(userId)); // get data of rule 2 e.g. count(userId, manuallyReview)
    }
    ...

    return result;
}

显然这种方式不是很聪明,所以我想知道如何更优雅地实现它。

1 个答案:

答案 0 :(得分:0)

也许Command模式可以帮助你成为基础